-
+
+ Gerenciar transações
-
+
-
+ :valid-deposits="depositList"
+ :wallet-transactions="lastWalletTransactions"
+ :active-lock-amount="activeLockAmount"
+ @deposit-withdrawn="callWithdraw"
+ >
@@ -77,14 +141,14 @@ p {
}
.text {
- @apply text-gray-800 text-center;
+ @apply text-white text-center;
}
.blur-container-row {
@apply flex flex-row justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-8 w-1/3;
}
.blur-container {
- @apply flex flex-col justify-center items-center px-8 py-6 gap-4 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10 w-auto;
+ @apply flex w-full max-w-xs md:max-w-lg flex-col justify-center items-center px-8 py-6 gap-4 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10;
}
.last-release-info {
@@ -99,4 +163,22 @@ input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
-webkit-appearance: none;
}
+
+.lg-view {
+ display: inline-block;
+}
+
+.sm-view {
+ display: none;
+}
+
+@media screen and (max-width: 500px) {
+ .lg-view {
+ display: none;
+ }
+
+ .sm-view {
+ display: inline-block;
+ }
+}
diff --git a/src/components/BuyConfirmedComponent/__tests__/BuyConfirmedComponent.spec.ts b/src/components/BuyConfirmedComponent/__tests__/BuyConfirmedComponent.spec.ts
index 829c7e9..f860cf5 100644
--- a/src/components/BuyConfirmedComponent/__tests__/BuyConfirmedComponent.spec.ts
+++ b/src/components/BuyConfirmedComponent/__tests__/BuyConfirmedComponent.spec.ts
@@ -1,32 +1,31 @@
-import { shallowMount } from "@vue/test-utils";
+import { mount } from "@vue/test-utils";
import BuyConfirmedComponent from "../BuyConfirmedComponent.vue";
import { createPinia, setActivePinia } from "pinia";
-import { MockEvents } from "@/model/mock/EventMock";
-describe("BuyConfirmedComponent.vue", () => {
+describe("BuyConfirmedComponent.vue", async () => {
beforeEach(() => {
setActivePinia(createPinia());
});
- const wrapper = shallowMount(BuyConfirmedComponent, {
+ const wrapper = mount(BuyConfirmedComponent, {
props: {
- lastWalletReleaseTransactions: MockEvents,
tokenAmount: 1,
+ isCurrentStep: false,
},
});
- test("Test component Header Text", () => {
- expect(wrapper.html()).toContain("Os tokens já foram transferidos");
- expect(wrapper.html()).toContain("para a sua carteira!");
- });
+ // test("Test component Header Text", () => {
+ // expect(wrapper.html()).toContain("Os tokens já foram transferidos");
+ // expect(wrapper.html()).toContain("para a sua carteira!");
+ // });
- test("Test component Container Text", () => {
- expect(wrapper.html()).toContain("Tokens recebidos");
- expect(wrapper.html()).toContain("BRZ");
- expect(wrapper.html()).toContain("Não encontrou os tokens?");
- expect(wrapper.html()).toContain("Clique no botão abaixo para");
- expect(wrapper.html()).toContain("cadastrar o BRZ em sua carteira.");
- });
+ // test("Test component Container Text", () => {
+ // expect(wrapper.html()).toContain("Tokens recebidos");
+ // expect(wrapper.html()).toContain("BRZ");
+ // expect(wrapper.html()).toContain("Não encontrou os tokens?");
+ // expect(wrapper.html()).toContain("Clique no botão abaixo para");
+ // expect(wrapper.html()).toContain("cadastrar o BRZ em sua carteira.");
+ // });
test("Test makeAnotherTransactionEmit", async () => {
wrapper.vm.$emit("makeAnotherTransaction");
diff --git a/src/components/CustomAlert/CustomAlert.vue b/src/components/CustomAlert/CustomAlert.vue
new file mode 100644
index 0000000..b49e4ec
--- /dev/null
+++ b/src/components/CustomAlert/CustomAlert.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+ {{ alertText }}
+
+
+
+

+
+
+
+ {{ alertText }}
+
+
+
+
+
+ Retomar a última compra?
+
+
+
+
+
+
+
+
+
diff --git a/src/components/CustomButton/CustomButton.vue b/src/components/CustomButton/CustomButton.vue
index d459688..1994747 100644
--- a/src/components/CustomButton/CustomButton.vue
+++ b/src/components/CustomButton/CustomButton.vue
@@ -21,6 +21,6 @@ const emit = defineEmits(["buttonClicked"]);
diff --git a/src/components/CustomModal/CustomModal.vue b/src/components/CustomModal/CustomModal.vue
new file mode 100644
index 0000000..f68de25
--- /dev/null
+++ b/src/components/CustomModal/CustomModal.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+ ATENÇÃO!
+ A transação só será processada após inserir o código de autenticação.
+ Caso contrário não conseguiremos comprovar o seu depósito e não será
+ possível transferir os tokens para sua carteira.
+
+
+
+
+
+
+
+ Retomar a última compra?
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/CustomModal/__tests__/CustomModal.spec.ts b/src/components/CustomModal/__tests__/CustomModal.spec.ts
new file mode 100644
index 0000000..3cb723b
--- /dev/null
+++ b/src/components/CustomModal/__tests__/CustomModal.spec.ts
@@ -0,0 +1,27 @@
+import { mount } from "@vue/test-utils";
+import CustomModal from "../CustomModal.vue";
+
+describe("CustomModal test", () => {
+ test("Test custom modal when receive is redirect modal props as false", () => {
+ const wrapper = mount(CustomModal, {
+ props: {
+ isRedirectModal: false,
+ },
+ });
+
+ expect(wrapper.html()).toContain("ATENÇÃO!");
+ expect(wrapper.html()).toContain("Entendi");
+ });
+
+ test("Test custom modal when receive is redirect modal props as true", () => {
+ const wrapper = mount(CustomModal, {
+ props: {
+ isRedirectModal: true,
+ },
+ });
+
+ expect(wrapper.html()).toContain("Retomar a última compra?");
+ expect(wrapper.html()).toContain("Não");
+ expect(wrapper.html()).toContain("Sim");
+ });
+});
diff --git a/src/components/ListingComponent/ListingComponent.vue b/src/components/ListingComponent/ListingComponent.vue
index 7bd3bd8..4bb2d1c 100644
--- a/src/components/ListingComponent/ListingComponent.vue
+++ b/src/components/ListingComponent/ListingComponent.vue
@@ -1,26 +1,103 @@
-
+
+
+
+
-
Valor
-
Data
-
{{
- props.isManageMode ? "Cancelar oferta" : "Tipo de transação"
- }}
-
{{
- props.isManageMode ? "Retirar tokens" : "Checar transação"
- }}
+
+
+
+ Saldo disponível
+
+
+ {{ getRemaining() }} BRZ
+
+
+
{{
+ `com ${activeLockAmount.toFixed(2)} BRZ em lock`
+ }}
+
+

+
+ Valor “em lock” significa que a quantia está aguardando
+ confirmação de compra e só estará disponível para saque caso a
+ transação expire.
+
+
+
+
+
+
+

+
Sacar
+
+
+
+
+
+
+ Por favor utilize no máximo 2 casas decimais
+
+
+ Saldo insuficiente
+
+
+
+
-
- {{
- isValidDeposit(item)
- ? item.remaining
- : getAmountFormatted(item.args?.amount)
- }}
- BRZ
-
-
-
20 out 2022
-
-
- {{ getEventName((item as Event).event) }}
-
-
-
-
Etherscan
-

-
-
-
-
Cancelar
-

-
-
-
-
Retirar
-

+
+
+
+ {{ getEventName(item.event) }}
+
+
+ {{ item.amount }}
+ BRZ
+
+
+
+
+ Em Aberto
+
+
+ Expirado
+
+
+ Finalizado
+
+
+
{{ getExplorer() }}
+

+
+
+ Continuar
+
+
({{ itemsToShow.length }} de {{ props.walletTransactions.length }}
- {{ isManageMode ? "ofertas" : "transações" }})
+ transações )
-
+
Não há nenhuma transação anterior
@@ -185,15 +375,19 @@ p {
@apply flex flex-col items-center justify-center gap-4;
}
-.text {
- @apply text-gray-800 text-center;
+.item-container {
+ @apply flex justify-between items-center;
}
-.blur-container-row {
- @apply flex flex-row justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-8 w-1/3;
+
+.status-text {
+ @apply text-xs sm:text-base font-medium text-gray-900 rounded-lg text-center mb-2 px-2 py-1 mt-4;
+}
+.text {
+ @apply text-white text-center;
}
.blur-container {
- @apply flex flex-col justify-center items-center px-8 py-6 gap-4 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md w-auto;
+ @apply flex flex-col justify-center items-center px-4 py-3 sm:px-8 sm:py-6 gap-4 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md w-auto;
}
.grid-container {
@@ -201,7 +395,20 @@ p {
}
.last-release-info {
- @apply font-medium text-base text-gray-900 justify-self-center;
+ @apply font-medium text-xs sm:text-sm text-gray-900 justify-self-center;
+}
+
+.tooltip {
+ @apply bg-white text-gray-900 font-medium text-xs md:text-base px-3 py-2 rounded border-2 border-emerald-500 left-5 top-[-3rem];
+}
+
+.router-button {
+ @apply rounded-lg border-amber-300 border-2 px-3 py-2 text-gray-900 font-semibold sm:text-base text-xs hover:bg-transparent w-full text-center;
+}
+
+.withdraw-button {
+ opacity: v-bind(withdrawButtonOpacity);
+ cursor: v-bind(withdrawButtonCursor);
}
input[type="number"] {
@@ -212,4 +419,10 @@ input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
-webkit-appearance: none;
}
+
+@media screen and (max-width: 640px) {
+ .md-view {
+ display: none;
+ }
+}
diff --git a/src/components/ListingComponent/__tests__/ListingComponent.spec.ts b/src/components/ListingComponent/__tests__/ListingComponent.spec.ts
index 382a3fc..89869bd 100644
--- a/src/components/ListingComponent/__tests__/ListingComponent.spec.ts
+++ b/src/components/ListingComponent/__tests__/ListingComponent.spec.ts
@@ -3,50 +3,37 @@ import ListingComponent from "@/components/ListingComponent/ListingComponent.vue
import { createPinia, setActivePinia } from "pinia";
import { expect } from "vitest";
import { MockValidDeposits } from "@/model/mock/ValidDepositMock";
-import { MockEvents } from "@/model/mock/EventMock";
+import { MockWalletTransactions } from "@/model/mock/WalletTransactionMock";
+import { useEtherStore } from "@/store/ether";
describe("ListingComponent.vue", () => {
beforeEach(() => {
setActivePinia(createPinia());
+ useEtherStore().setLoadingWalletTransactions(false);
});
- test("Test Headers on List in Manage Mode", () => {
+ test("Test Message when an empty array is received", () => {
const wrapper = mount(ListingComponent, {
props: {
- walletTransactions: MockValidDeposits,
- isManageMode: true,
+ validDeposits: [],
+ walletTransactions: [],
+ activeLockAmount: 0,
},
});
- expect(wrapper.html()).toContain("Valor");
- expect(wrapper.html()).toContain("Data");
- expect(wrapper.html()).toContain("Cancelar oferta");
- expect(wrapper.html()).toContain("Retirar tokens");
- });
-
- test("Test Headers on List in Unmanage Mode", () => {
- const wrapper = mount(ListingComponent, {
- props: {
- walletTransactions: MockEvents,
- isManageMode: false,
- },
- });
-
- expect(wrapper.html()).toContain("Valor");
- expect(wrapper.html()).toContain("Data");
- expect(wrapper.html()).toContain("Tipo de transação");
- expect(wrapper.html()).toContain("Checar transação");
+ expect(wrapper.html()).toContain("Não há nenhuma transação anterior");
});
test("Test number of elements in the list first render", () => {
const wrapper = mount(ListingComponent, {
props: {
- walletTransactions: MockEvents,
- isManageMode: false,
+ validDeposits: [],
+ walletTransactions: MockWalletTransactions,
+ activeLockAmount: 0,
},
});
- const elements = wrapper.findAll(".transaction-date");
+ const elements = wrapper.findAll(".item-container");
expect(elements).toHaveLength(3);
});
@@ -54,47 +41,47 @@ describe("ListingComponent.vue", () => {
test("Test load more button behavior", async () => {
const wrapper = mount(ListingComponent, {
props: {
- walletTransactions: MockValidDeposits,
- isManageMode: false,
+ validDeposits: MockValidDeposits,
+ walletTransactions: MockWalletTransactions,
+ activeLockAmount: 0,
},
});
const btn = wrapper.find("button");
- let elements = wrapper.findAll(".transaction-date");
+ let elements = wrapper.findAll(".item-container");
expect(elements).toHaveLength(3);
await btn.trigger("click");
- elements = wrapper.findAll(".transaction-date");
+ elements = wrapper.findAll(".item-container");
expect(elements).toHaveLength(5);
});
- test("Test cancel offer button emit", async () => {
- const wrapper = mount(ListingComponent, {
- props: {
- walletTransactions: MockValidDeposits,
- isManageMode: true,
- },
- });
- wrapper.vm.$emit("cancelDeposit");
-
- await wrapper.vm.$nextTick();
-
- expect(wrapper.emitted("cancelDeposit")).toBeTruthy();
- });
-
test("Test withdraw offer button emit", async () => {
const wrapper = mount(ListingComponent, {
props: {
- walletTransactions: MockValidDeposits,
- isManageMode: true,
+ validDeposits: MockValidDeposits,
+ walletTransactions: MockWalletTransactions,
+ activeLockAmount: 0,
},
});
- wrapper.vm.$emit("withdrawDeposit");
+ wrapper.vm.$emit("depositWithdrawn");
await wrapper.vm.$nextTick();
- expect(wrapper.emitted("withdrawDeposit")).toBeTruthy();
+ expect(wrapper.emitted("depositWithdrawn")).toBeTruthy();
+ });
+
+ test("Test should render lock info when active lock amount is greater than 0", () => {
+ const wrapper = mount(ListingComponent, {
+ props: {
+ validDeposits: MockValidDeposits,
+ walletTransactions: [],
+ activeLockAmount: 50,
+ },
+ });
+
+ expect(wrapper.html()).toContain("com 50.00 BRZ em lock");
});
});
diff --git a/src/components/LoadingComponent.vue b/src/components/LoadingComponent/LoadingComponent.vue
similarity index 63%
rename from src/components/LoadingComponent.vue
rename to src/components/LoadingComponent/LoadingComponent.vue
index 57d5582..8881c6d 100644
--- a/src/components/LoadingComponent.vue
+++ b/src/components/LoadingComponent/LoadingComponent.vue
@@ -9,16 +9,18 @@ const props = defineProps({
- {{
- props.title ? props.title : "Confirme em sua carteira"
- }}
+
+ {{ props.title ? props.title : "Confirme em sua carteira" }}
+
-
+
![Polygon image]()
-
+
{{ $props.message }}
@@ -55,11 +57,11 @@ const props = defineProps({
}
.text {
- @apply text-gray-800 text-center;
+ @apply text-white text-center;
}
.blur-container {
- @apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10;
+ @apply flex flex-col justify-center items-center sm:px-8 px-6 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10;
}
input[type="number"] {
diff --git a/src/components/LoadingComponent/__tests__/LoadingComponent.spec.ts b/src/components/LoadingComponent/__tests__/LoadingComponent.spec.ts
new file mode 100644
index 0000000..8864a65
--- /dev/null
+++ b/src/components/LoadingComponent/__tests__/LoadingComponent.spec.ts
@@ -0,0 +1,27 @@
+import { mount } from "@vue/test-utils";
+import LoadingComponent from "../LoadingComponent.vue";
+
+describe("Loading.vue", () => {
+ test("Test loading content with received props", () => {
+ const wrapper = mount(LoadingComponent, {
+ props: {
+ title: "MockTitle",
+ message: "MockMessage",
+ },
+ });
+
+ expect(wrapper.html()).toContain("MockTitle");
+ expect(wrapper.html()).toContain("MockMessage");
+ });
+
+ test("Test default text if props title isnt passed", () => {
+ const wrapper = mount(LoadingComponent, {
+ props: {
+ message: "MockMessage",
+ },
+ });
+
+ expect(wrapper.html()).toContain("Confirme em sua carteira");
+ expect(wrapper.html()).toContain("MockMessage");
+ });
+});
diff --git a/src/components/QrCodeComponent.vue b/src/components/QrCodeComponent.vue
index 18e50a5..2e9357f 100644
--- a/src/components/QrCodeComponent.vue
+++ b/src/components/QrCodeComponent.vue
@@ -1,9 +1,10 @@
-
-
+
Código pix
@@ -95,9 +113,9 @@ const validatePix = async (): Promise
=> {
src="@/assets/copyPix.svg"
width="16"
height="16"
- class="pt-2 mb-5 cursor-pointer"
+ class="pt-2 lg:mb-5 cursor-pointer"
/>
-
+
ATENÇÃO! A transação só será processada após inserir
o código de autenticação. Caso contrário não conseguiremos comprovar o
seu depósito e não será possível transferir os tokens para sua
@@ -111,7 +129,7 @@ const validatePix = async (): Promise => {
type="text"
placeholder="Digite o código do comprovante PIX"
@input="debounce(handleInputEvent, 500)($event)"
- class="text-md w-full box-border p-2 h-6 mb-2 outline-none"
+ class="sm:text-md text-sm w-full box-border p-2 sm:h-6 h-2 mb-2 outline-none"
/>
=> {
@button-clicked="emit('pixValidated', e2eId)"
/>
+
@@ -195,7 +218,7 @@ h2 {
}
.text {
- @apply text-gray-800 text-center;
+ @apply text-white text-center;
}
.blur-container {
@@ -210,4 +233,22 @@ input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
-webkit-appearance: none;
}
+
+.lg-view {
+ display: inline-block;
+}
+
+.sm-view {
+ display: none;
+}
+
+@media screen and (max-width: 500px) {
+ .lg-view {
+ display: none;
+ }
+
+ .sm-view {
+ display: inline-block;
+ }
+}
diff --git a/src/components/SearchComponent.vue b/src/components/SearchComponent.vue
index dd328cb..3983fd5 100644
--- a/src/components/SearchComponent.vue
+++ b/src/components/SearchComponent.vue
@@ -9,6 +9,7 @@ import { verifyNetworkLiquidity } from "@/utils/networkLiquidity";
import { NetworkEnum } from "@/model/NetworkEnum";
import type { ValidDeposit } from "@/model/ValidDeposit";
import { decimalCount } from "@/utils/decimalCount";
+import SpinnerComponent from "./SpinnerComponent.vue";
// Store reference
const etherStore = useEtherStore();
@@ -18,6 +19,7 @@ const {
networkName,
depositsValidListGoerli,
depositsValidListMumbai,
+ loadingNetworkLiquidity,
} = storeToRefs(etherStore);
// Reactive state
@@ -107,29 +109,37 @@ const enableOrDisableConfirmButton = (): void => {
};
watch(networkName, (): void => {
+ verifyLiquidity();
enableOrDisableConfirmButton();
});
+
+watch(walletAddress, (): void => {
+ verifyLiquidity();
+});
-
-
+ Digite um valor, confira a oferta, conecte sua carteira e receba os
tokens após realizar o Pix
+
-
+
-

-
BRZ
+

+
BRZ
-
-
+
+
~ R$ {{ tokenValue.toFixed(2) }}
@@ -168,12 +187,27 @@ watch(networkName, (): void => {
/>
-
+
+ Carregando liquidez das redes.
+
+
+
Por favor utilize no máximo 2 casas decimais
-
+
Atualmente não há liquidez nas redes para sua demanda
@@ -215,11 +249,11 @@ watch(networkName, (): void => {
}
.text {
- @apply text-gray-800 text-center;
+ @apply text-white text-center;
}
.blur-container {
- @apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10;
+ @apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 mt-10;
}
input[type="number"] {
diff --git a/src/components/SellerSteps/SellerSearchComponent.vue b/src/components/SellerSteps/SellerSearchComponent.vue
index d92103c..d26cb0c 100644
--- a/src/components/SellerSteps/SellerSearchComponent.vue
+++ b/src/components/SellerSteps/SellerSearchComponent.vue
@@ -1,6 +1,6 @@
-
+
-
- Digite sua oferta, informe a chave Pix, selecione a rede, aprove o
envio da transação e confirme sua oferta.
+
-
+
-

-
BRZ
+

+
BRZ
@@ -92,19 +118,26 @@ const handleButtonClick = async (
+
+ Por favor utilize telefone, CPF ou CNPJ
+
@@ -131,11 +164,11 @@ const handleButtonClick = async (
}
.text {
- @apply text-gray-800 text-center;
+ @apply text-white text-center;
}
.blur-container {
- @apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10;
+ @apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 mt-10 w-auto;
}
input[type="number"] {
@@ -146,4 +179,8 @@ input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
-webkit-appearance: none;
}
+
+input {
+ @apply sm:text-lg text-sm;
+}
diff --git a/src/components/SpinnerComponent.vue b/src/components/SpinnerComponent.vue
new file mode 100644
index 0000000..df9e072
--- /dev/null
+++ b/src/components/SpinnerComponent.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/src/components/TopBar/TopBar.vue b/src/components/TopBar/TopBar.vue
index 0e513c0..03b96b5 100644
--- a/src/components/TopBar/TopBar.vue
+++ b/src/components/TopBar/TopBar.vue
@@ -2,6 +2,7 @@
import { storeToRefs } from "pinia";
import { useEtherStore } from "@/store/ether";
import { ref } from "vue";
+import { onClickOutside } from "@vueuse/core";
import { NetworkEnum } from "@/model/NetworkEnum";
import { connectProvider, requestNetworkChange } from "@/blockchain/provider";
import ethereumImage from "@/assets/ethereum.svg";
@@ -15,8 +16,12 @@ const { walletAddress, sellerView } = storeToRefs(etherStore);
const menuOpenToggle = ref
(false);
const menuHoverToggle = ref(false);
+const infoMenuOpenToggle = ref(false);
const currencyMenuOpenToggle = ref(false);
const currencyMenuHoverToggle = ref(false);
+const infoMenuRef = ref(null);
+const walletAddressRef = ref(null);
+const currencyRef = ref(null);
//Methods
const connectMetaMask = async (): Promise => {
@@ -58,32 +63,161 @@ const getNetworkImage = (networkName: NetworkEnum): string => {
return validImages[networkName];
};
+
+onClickOutside(walletAddressRef, () => {
+ menuHoverToggle.value = false;
+ menuOpenToggle.value = false;
+});
+
+onClickOutside(currencyRef, () => {
+ currencyMenuOpenToggle.value = false;
+ currencyMenuHoverToggle.value = false;
+});
+
+onClickOutside(infoMenuRef, () => {
+ infoMenuOpenToggle.value = false;
+});
-
+
+
-
-
FAQ
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Menu
+
+
+
+
+ FAQ
+
+
+ {{ sellerView ? "Quero comprar" : "Quero vender" }}
+
+
{{ sellerView ? "Quero comprar" : "Quero vender" }}
{
:src="getNetworkImage(etherStore.networkName)"
/>
@@ -176,19 +310,29 @@ const getNetworkImage = (networkName: NetworkEnum): string => {
+
{
>
+
+
@@ -273,7 +514,7 @@ header {
}
.default-button {
- @apply px-4 py-2 rounded text-gray-50 font-semibold text-base hover:bg-transparent;
+ @apply sm:px-4 px-3 py-2 rounded text-gray-50 font-semibold sm:text-base text-xs hover:bg-transparent;
}
.account-info {
@@ -285,18 +526,42 @@ header {
}
.top-bar-info {
- @apply flex justify-between gap-2 px-4 py-2 border-amber-500 border-2 rounded;
+ @apply flex justify-between gap-2 px-4 py-2 border-amber-500 border-2 sm:rounded rounded-lg items-center;
}
.redirect_button {
- @apply py-4 text-gray-900 font-semibold text-xs w-full;
+ @apply py-5 text-gray-900 sm:font-semibold font-bold sm:text-xs text-sm w-full;
}
.menu-button {
- @apply flex text-center justify-center hover:bg-gray-200;
+ @apply flex sm:text-center sm:justify-center hover:bg-gray-200 ml-8 sm:ml-0;
}
a:hover {
@apply bg-gray-200 rounded;
}
+
+.lg-view {
+ display: inline-block;
+}
+
+.sm-view {
+ display: none;
+}
+
+.mobile-menu {
+ margin-top: 1400px;
+ bottom: 0px;
+ height: auto;
+}
+
+@media screen and (max-width: 500px) {
+ .lg-view {
+ display: none;
+ }
+
+ .sm-view {
+ display: inline-block;
+ }
+}
diff --git a/src/components/TopBar/__tests__/TopBar.spec.ts b/src/components/TopBar/__tests__/TopBar.spec.ts
index 8e28f75..6a55d74 100644
--- a/src/components/TopBar/__tests__/TopBar.spec.ts
+++ b/src/components/TopBar/__tests__/TopBar.spec.ts
@@ -30,6 +30,6 @@ describe("TopBar.vue", () => {
it("should render the P2Pix logo correctly", () => {
const wrapper = shallowMount(TopBar);
const img = wrapper.findAll(".logo");
- expect(img.length).toBe(1);
+ expect(img.length).toBe(2);
});
});
diff --git a/src/model/UnreleasedLock.ts b/src/model/UnreleasedLock.ts
new file mode 100644
index 0000000..c0ec3f6
--- /dev/null
+++ b/src/model/UnreleasedLock.ts
@@ -0,0 +1,6 @@
+import type { Pix } from "./Pix";
+
+export type UnreleasedLock = {
+ lockID: string;
+ pix: Pix;
+};
diff --git a/src/model/ValidDeposit.ts b/src/model/ValidDeposit.ts
index d22693b..f7e9aa2 100644
--- a/src/model/ValidDeposit.ts
+++ b/src/model/ValidDeposit.ts
@@ -1,10 +1,8 @@
-import type { BigNumber } from "ethers";
-
export type ValidDeposit = {
- depositID: BigNumber;
+ token: string;
blockNumber: number;
remaining: number;
seller: string;
- pixKey: string;
- pixTarget?: string;
+ pixKey: number;
+ open?: boolean;
};
diff --git a/src/model/WalletTransaction.ts b/src/model/WalletTransaction.ts
new file mode 100644
index 0000000..1739aa5
--- /dev/null
+++ b/src/model/WalletTransaction.ts
@@ -0,0 +1,11 @@
+export type WalletTransaction = {
+ token: string;
+ blockNumber: number;
+ amount: number;
+ seller: string;
+ buyer: string;
+ event: string;
+ lockStatus: number;
+ transactionHash: string;
+ transactionID?: string;
+};
diff --git a/src/model/mock/EventMock.ts b/src/model/mock/EventMock.ts
index 55d5d25..ed03598 100644
--- a/src/model/mock/EventMock.ts
+++ b/src/model/mock/EventMock.ts
@@ -89,4 +89,33 @@ export const MockEvents: Event[] = [
getTransaction: vi.fn(),
getTransactionReceipt: vi.fn(),
},
+ {
+ blockNumber: 4,
+ blockHash: "0x8",
+ transactionIndex: 4,
+ removed: false,
+ address: "0x0",
+ data: "0x0",
+ topics: ["0x0", "0x0"],
+ transactionHash: "0x0",
+ logIndex: 4,
+ event: "LockReleased",
+ eventSignature: "LockReleased(address,uint256,address,uint256)",
+ args: [
+ "0x0",
+ {
+ type: "BigNumber",
+ hex: "0x00",
+ },
+ "0x0",
+ {
+ type: "BigNumber",
+ hex: "0x6c6b935b8bbd400000",
+ },
+ ],
+ getBlock: vi.fn(),
+ removeListener: vi.fn(),
+ getTransaction: vi.fn(),
+ getTransactionReceipt: vi.fn(),
+ },
];
diff --git a/src/model/mock/ValidDepositMock.ts b/src/model/mock/ValidDepositMock.ts
index c35c059..3900321 100644
--- a/src/model/mock/ValidDepositMock.ts
+++ b/src/model/mock/ValidDepositMock.ts
@@ -1,40 +1,39 @@
-import { parseEther } from "ethers/lib/utils";
import type { ValidDeposit } from "../ValidDeposit";
export const MockValidDeposits: ValidDeposit[] = [
{
blockNumber: 1,
- depositID: parseEther("1"),
+ token: "1",
remaining: 70,
seller: "mockedSellerAddress",
- pixKey: "123456789",
+ pixKey: 123456789,
},
{
blockNumber: 2,
- depositID: parseEther("2"),
+ token: "2",
remaining: 200,
seller: "mockedSellerAddress",
- pixKey: "123456789",
+ pixKey: 123456789,
},
{
blockNumber: 3,
- depositID: parseEther("3"),
+ token: "3",
remaining: 1250,
seller: "mockedSellerAddress",
- pixKey: "123456789",
+ pixKey: 123456789,
},
{
blockNumber: 4,
- depositID: parseEther("4"),
+ token: "4",
remaining: 4000,
seller: "mockedSellerAddress",
- pixKey: "123456789",
+ pixKey: 123456789,
},
{
blockNumber: 5,
- depositID: parseEther("5"),
+ token: "5",
remaining: 2000,
seller: "mockedSellerAddress",
- pixKey: "123456789",
+ pixKey: 123456789,
},
];
diff --git a/src/model/mock/WalletTransactionMock.ts b/src/model/mock/WalletTransactionMock.ts
new file mode 100644
index 0000000..3cab827
--- /dev/null
+++ b/src/model/mock/WalletTransactionMock.ts
@@ -0,0 +1,54 @@
+import type { WalletTransaction } from "../WalletTransaction";
+
+export const MockWalletTransactions: WalletTransaction[] = [
+ {
+ blockNumber: 1,
+ token: "1",
+ amount: 70,
+ seller: "mockedSellerAddress",
+ buyer: "mockedBuyerAddress",
+ event: "Deposit",
+ lockStatus: 0,
+ transactionHash: "1",
+ },
+ {
+ blockNumber: 2,
+ token: "2",
+ amount: 200,
+ seller: "mockedSellerAddress",
+ buyer: "mockedBuyerAddress",
+ event: "Lock",
+ lockStatus: 1,
+ transactionHash: "2",
+ },
+ {
+ blockNumber: 3,
+ token: "3",
+ amount: 1250,
+ seller: "mockedSellerAddress",
+ buyer: "mockedBuyerAddress",
+ event: "Release",
+ lockStatus: 2,
+ transactionHash: "3",
+ },
+ {
+ blockNumber: 4,
+ token: "4",
+ amount: 4000,
+ seller: "mockedSellerAddress",
+ buyer: "mockedBuyerAddress",
+ event: "Deposit",
+ lockStatus: 0,
+ transactionHash: "4",
+ },
+ {
+ blockNumber: 5,
+ token: "5",
+ amount: 2000,
+ seller: "mockedSellerAddress",
+ buyer: "mockedBuyerAddress",
+ event: "Deposit",
+ lockStatus: 3,
+ transactionHash: "5",
+ },
+];
diff --git a/src/router/index.ts b/src/router/index.ts
index 9b48387..fe48ef0 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -1,8 +1,7 @@
import { createRouter, createWebHistory } from "vue-router";
-import HomeView from "../views/HomeView.vue";
-import TransactionHistoryView from "../views/TransactionHistoryView.vue";
-import FaqView from "../views/FaqView.vue";
-import ManageBidsView from "../views/ManageBidsView.vue";
+import HomeView from "@/views/HomeView.vue";
+import FaqView from "@/views/FaqView.vue";
+import ManageBidsView from "@/views/ManageBidsView.vue";
import SellerView from "@/views/SellerView.vue";
const router = createRouter({
@@ -12,17 +11,18 @@ const router = createRouter({
path: "/",
name: "home",
component: HomeView,
+ props: true,
+ },
+ {
+ path: "/:lockID",
+ name: "redirect buy",
+ component: HomeView,
},
{
path: "/seller",
name: "seller",
component: SellerView,
},
- {
- path: "/transaction_history",
- name: "transaction history",
- component: TransactionHistoryView,
- },
{
path: "/manage_bids",
name: "manage bids",
diff --git a/src/store/ether.ts b/src/store/ether.ts
index 9de0037..10c98f1 100644
--- a/src/store/ether.ts
+++ b/src/store/ether.ts
@@ -13,6 +13,8 @@ export const useEtherStore = defineStore("ether", {
depositsValidListGoerli: [] as ValidDeposit[],
// Depósitos válidos para compra MUMBAI
depositsValidListMumbai: [] as ValidDeposit[],
+ loadingWalletTransactions: false,
+ loadingNetworkLiquidity: false,
}),
actions: {
setWalletAddress(walletAddress: string) {
@@ -36,6 +38,12 @@ export const useEtherStore = defineStore("ether", {
setDepositsValidListMumbai(depositsValidList: ValidDeposit[]) {
this.depositsValidListMumbai = depositsValidList;
},
+ setLoadingWalletTransactions(isLoadingWalletTransactions: boolean) {
+ this.loadingWalletTransactions = isLoadingWalletTransactions;
+ },
+ setLoadingNetworkLiquidity(isLoadingNetworkLiquidity: boolean) {
+ this.loadingNetworkLiquidity = isLoadingNetworkLiquidity;
+ },
},
// Alterar para integrar com mumbai
getters: {
diff --git a/src/utils/__tests__/debounce.spec.ts b/src/utils/__tests__/debounce.spec.ts
new file mode 100644
index 0000000..b9512c4
--- /dev/null
+++ b/src/utils/__tests__/debounce.spec.ts
@@ -0,0 +1,24 @@
+import { it, expect, vi, type Mock } from "vitest";
+import { debounce } from "../debounce";
+
+vi.useFakeTimers();
+
+describe("debounce function test", () => {
+ let mockFunction: Mock;
+ let debounceFunction: Function;
+
+ beforeEach(() => {
+ mockFunction = vi.fn();
+ debounceFunction = debounce(mockFunction, 1000);
+ });
+
+ it("debounce function will be executed just once", () => {
+ for (let i = 0; i < 100; i++) {
+ debounceFunction();
+ }
+
+ vi.runAllTimers();
+
+ expect(mockFunction).toBeCalledTimes(1);
+ });
+});
diff --git a/src/utils/__tests__/decimalCount.spec.ts b/src/utils/__tests__/decimalCount.spec.ts
new file mode 100644
index 0000000..53ff890
--- /dev/null
+++ b/src/utils/__tests__/decimalCount.spec.ts
@@ -0,0 +1,12 @@
+import { it, expect } from "vitest";
+import { decimalCount } from "../decimalCount";
+
+describe("decimalCount function test", () => {
+ it("decimalCount should return length 1 of decimal", () => {
+ expect(decimalCount("4.1")).toEqual(1);
+ });
+
+ it("decimalCount should return length 0 because no decimal found", () => {
+ expect(decimalCount("5")).toEqual(0);
+ });
+});
diff --git a/src/utils/__tests__/networkLiquidity.spec.ts b/src/utils/__tests__/networkLiquidity.spec.ts
new file mode 100644
index 0000000..00dd9e7
--- /dev/null
+++ b/src/utils/__tests__/networkLiquidity.spec.ts
@@ -0,0 +1,25 @@
+import { MockValidDeposits } from "@/model/mock/ValidDepositMock";
+import { it, expect, vi } from "vitest";
+import { verifyNetworkLiquidity } from "../networkLiquidity";
+
+vi.useFakeTimers();
+
+describe("verifyNetworkLiquidity function test", () => {
+ it("verifyNetworkLiquidity should return an element from valid deposit list when searching for other deposits", () => {
+ const liquidityElement = verifyNetworkLiquidity(
+ MockValidDeposits[0].remaining,
+ "strangeWalletAddress",
+ MockValidDeposits
+ );
+ expect(liquidityElement).toEqual(MockValidDeposits[0]);
+ });
+
+ it("verifyNetworkLiquidity should return undefined when all deposits on valid deposit list match connected wallet addres", () => {
+ const liquidityElement = verifyNetworkLiquidity(
+ MockValidDeposits[0].remaining,
+ MockValidDeposits[0].seller,
+ [MockValidDeposits[0]]
+ );
+ expect(liquidityElement).toEqual(undefined);
+ });
+});
diff --git a/src/utils/files/faqContent.json b/src/utils/files/faqContent.json
new file mode 100644
index 0000000..5be0f1a
--- /dev/null
+++ b/src/utils/files/faqContent.json
@@ -0,0 +1,53 @@
+[
+ {
+ "name": "1. Como Começar",
+ "items": [
+ {
+ "title": "O que é uma carteira (wallet)?",
+ "content": "Cripto-wallet é um software que armazena criptomoedas e criptoativos de forma segura. Existem também dispositivos físicos chamados de cold/hard wallets. Com a carteira-cripto você consegue comprar e vender tokens sem a necessidade de uma corretora (exchange), por exemplo. Cripto-ativos não ficam de fato armazenados nessa carteira, mas sim as informações que possibilitam acessá-los numa blockchain, como suas chaves pública e privada.\n
\n\n* **O que é um endereço de carteira (wallet address)?**\n Sequência alfanumérica que permite que você envie e receba suas criptomoedas em segurança. Por exemplo: 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy.\n\n* **Como conectar sua carteira ao p2pix?**\n Clique em 'Conectar Carteira'. Escolha qual wallet ou ponte (bridge) utilizará para se conectar (MetaMask ou WalletConnect). Ao clicar, sua carteira se abrirá. Caso seja seu 1º acesso, certifique-se de que permitiu sua carteira a se conectar com nossa plataforma. \n\n* **Como instalar MetaMask no Google Chrome?** \n MetaMask é uma web3 wallet que pode ser adicionada como extensão no seu browser (navegador). Para instalar esse plugin (add-on) no Google Chrome, basta você acessar a Chrome Web Store e pesquisar “MetaMask”. Certifique-se de que é a versão legítima da carteira pelo número de downloads (bastante alto, pois é a maior cold wallet da web3), então é só clicar em “Adicionar ao Chrome”. Depois da instalação ser concluída, basta seguir o passo-a-passo proposto na interface da MetaMask para a criação da conta, login e senha. O caminho para a instalação em outros browsers como Firefox, Opera, entre outros navegadores, é o mesmo. \n\n
\nNota: Não esqueça de guardar sua seed phrase em um local seguro! Sem ela é impossível recuperar o acesso à sua carteira (caso perca sua senha) e também aos seus cripto ativos, eles serão perdidos - literalmente - para sempre.\n"
+ },
+ {
+ "title": "O que é uma rede (network)?",
+ "content": "Criptomoedas são transacionadas em redes de computadores, nas blockchains é que ficam armazenadas as informações sobre suas transações, não em um servidor. Existem [diversas redes no ecossistema cripto](https://www.gemini.com/cryptopedia/blockchain-technology-explained), como a rede do Bitcoin, da Ethereum, para citar as duas mais conhecidas. \n
\n\n* **Como selecionar a rede?**\nVocê deve ficar atento a rede que está selecionada em sua carteira. Na MetaMask, escolha a você escolhe a rede que vai operar clicando na primeira caixa ao lado do seu avatar:\n\nCaso você copie um endereço na sua MetaMask estando selecionada a Rede Ethereum Mainnet e queira operar na Polygon, seus cripto ativos serão perdidos. \n\n* **O que é taxa de rede (gas fee)?**\nCusto de transação do blockchain. Você paga essa taxa para a rede que vai remunerar os validadores. É uma forma de incentivar os validadores a dar continuidade nos seus serviços. "
+ }
+ ]
+ },
+ {
+ "name": "2. Comprar tokens",
+ "items": [
+ {
+ "title": "Como comprar?",
+ "content": "1. Conectar wallet (MetaMask ou WalletConnect)\n2. Digitar amount (quantidade);\n3. Solicitar token (criptomoeda);\n4. Identificar vendedor (da lista de pessoas);\n * Escanear QRCode (ou acrescenta chave manualmente);\n * Colar e2eID (identificação end-to-end) a.k.a. código de identificação (API Pix / comprovante bancário);\n5. Receber na carteira (wallet conectada."
+ },
+ {
+ "title": "O que é uma stablecoin?",
+ "content": "É uma criptomoeda com lastro em moeda fiduciária (por exemplo, Real brasileiro ou Dólar americando). Cada stablecoin gerada por um projeto emissor tem a mesma quantidade em reserva da moeda fiduciária em seu caixa. Alguns exemplos de stablecoins pareadas com dólar americano são USDt, DAI, USDc. Já vinculadas ao preço do Real são BRZ, MBRL e cREAL.\n
\n\n* **O que é o BRZ?**\n [BRZ](https://www.brztoken.io/) é a sigla para Brazilian Digital Token. É um tipo de criptomoeda que tem valor pareado com o Real (BRL). Ou seja, 1 BRZ tem valor igual a 1 BRL."
+ },
+ {
+ "title": "De quem estou comprando?",
+ "content": "Vendedores fazem as ofertas e indicam a chave-Pix que irão receber o valor transacionado. Essa oferta fica travada no smart contract até que as transações sejam concluídas e você possa fazer o saque dos seus tokens. \n\n
\n\n* **Onde encontrar comprovante do Pix?**\n Quando você faz um Pix um comprovante é gerado automaticamente para o pagador e para o recebedor. Esse comprovante pode ser acessado no momento da transação via app/site do banco ou pelo seu extrato bancário convencional.\n* **Para onde vão os tokens que eu comprei?**\n Os tokens comprados terão como destino a carteira que você conectou ao p2pix. \n Nota: Lembre-se sempre de configurar a sua carteira na rede correta em que quer receber seus tokens. "
+ }
+ ]
+ },
+ {
+ "name": "3. Vender tokens",
+ "items": [
+ {
+ "title": "Como vender?",
+ "content": "1. Enviar tokens;\n2. Indique sua chave-Pix;\n3. Criar [whitelist](https://academy.binance.com/en/glossary/whitelist) onde quer receber isso;\n4. Withdraw (saque) para remoção dos tokens;\n5. Lock (trava de 24h) para esperar transações antes dos saques.\n"
+ },
+ {
+ "title": "O que é aprovar tokens?",
+ "content": "Aprovações de tokens funcionam como permissões de sua carteira a um determinado [dApp](https://ethereum.org/en/developers/docs/dapps/) para movimentar os tokens. Ao aprovar tokens, você permite que nosso contrato inteligente acesse e execute as transações na sua carteira web3."
+ },
+ {
+ "title": "O que é o lock na rede?",
+ "content": "\"Travamento\" na rede é uma forma de especificar um tempo para retirada dos ativos digitais. O contrato inteligente do p2pix 'trava' os tokens enviados para a rede por 24 horas. Só depois de transcorridas essas 24h que o saque dos tokens estará liberado. Isso ocorre para garantir uma transação segura para os vendedores."
+ },
+ {
+ "title": "Como retirar a oferta?",
+ "content": "Caso você desista da sua oferta, você pode invalidar sua ordem de venda e impedir um novo ‘lock’ na rede."
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/src/utils/pixKeyFormat.ts b/src/utils/pixKeyFormat.ts
new file mode 100644
index 0000000..8b85533
--- /dev/null
+++ b/src/utils/pixKeyFormat.ts
@@ -0,0 +1,16 @@
+export const pixFormatValidation = (pixKey: string): boolean => {
+ const cpf = /(^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$)/g;
+ const cnpj = /(^\d{2}\.?\d{3}\.?\d{3}\/?\d{4}-?\d{2}$)/g;
+ const telefone = /(^[0-9]{2})?(\s|-)?(9?[0-9]{4})-?([0-9]{4}$)/g;
+
+ if (pixKey.match(cpf) || pixKey.match(cnpj) || pixKey.match(telefone)) {
+ return true;
+ }
+
+ return false;
+};
+
+export const postProcessKey = (pixKey: string): string => {
+ pixKey = pixKey.replace(/[-.()/]/g, "");
+ return pixKey;
+};
diff --git a/src/utils/smart_contract_files/MockToken.json b/src/utils/smart_contract_files/MockToken.json
index 02d3603..8b17455 100644
--- a/src/utils/smart_contract_files/MockToken.json
+++ b/src/utils/smart_contract_files/MockToken.json
@@ -330,8 +330,8 @@
"type": "function"
}
],
- "bytecode": "0x60e06040523480156200001157600080fd5b50604051620010bf380380620010bf833981016040819052620000349162000279565b6040805180820182526007815266135bd8dad0949360ca1b6020808301918252835180850190945260048452631350949360e21b908401528151919291601291620000839160009190620001d3565b50815162000099906001906020850190620001d3565b5060ff81166080524660a052620000af620000ca565b60c05250620000c391503390508262000166565b506200039b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000fe9190620002d0565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546200017a919062000374565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620001e19062000293565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b6000602082840312156200028c57600080fd5b5051919050565b600181811c90821680620002a857607f821691505b60208210811415620002ca57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002ed57607f831692505b60208084108214156200030e57634e487b7160e01b86526022600452602486fd5b818015620003255760018114620003375762000366565b60ff1986168952848901965062000366565b60008a81526020902060005b868110156200035e5781548b82015290850190830162000343565b505084890196505b509498975050505050505050565b600082198211156200039657634e487b7160e01b600052601160045260246000fd5b500190565b60805160a05160c051610cf4620003cb60003960006104630152600061042e015260006101540152610cf46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906108fc565b60405180910390f35b61011561011036600461096d565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610997565b610338565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61042a565b61012e61019e3660046109d3565b60036020526000908152604090205481565b61012e6101be3660046109d3565b60056020526000908152604090205481565b6100ec610485565b6101156101e636600461096d565b610492565b6101fe6101f93660046109f5565b61050a565b005b61012e61020e366004610a68565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610ab1565b6107b1565b6000805461024b90610b7c565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610b7c565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103945761036f8382610bcd565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b038516600090815260036020526040812080548592906103bc908490610bcd565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104179087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104605761045b6107f7565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610b7c565b336000908152600360205260408120805483919083906104b3908490610bcd565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b42841015610579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b6000600161058561042a565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f19010000000000000000000000000000000000000000000000000000000000006101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156106ac573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106e25750876001600160a01b0316816001600160a01b0316145b610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610570565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b815160005b818110156107f1576107e18482815181106107d3576107d3610be4565b602002602001015184610891565b6107ea81610bfa565b90506107b6565b50505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516108299190610c15565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546108a39190610ccf565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b818110156109295785810183015185820160400152820161090d565b8181111561093b576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461096857600080fd5b919050565b6000806040838503121561098057600080fd5b61098983610951565b946020939093013593505050565b6000806000606084860312156109ac57600080fd5b6109b584610951565b92506109c360208501610951565b9150604084013590509250925092565b6000602082840312156109e557600080fd5b6109ee82610951565b9392505050565b600080600080600080600060e0888a031215610a1057600080fd5b610a1988610951565b9650610a2760208901610951565b95506040880135945060608801359350608088013560ff81168114610a4b57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610a7b57600080fd5b610a8483610951565b9150610a9260208401610951565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610ac457600080fd5b823567ffffffffffffffff80821115610adc57600080fd5b818501915085601f830112610af057600080fd5b8135602082821115610b0457610b04610a9b565b8160051b604051601f19603f83011681018181108682111715610b2957610b29610a9b565b604052928352818301935084810182019289841115610b4757600080fd5b948201945b83861015610b6c57610b5d86610951565b85529482019493820193610b4c565b9997909101359750505050505050565b600181811c90821680610b9057607f821691505b60208210811415610bb157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610bdf57610bdf610bb7565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610c0e57610c0e610bb7565b5060010190565b600080835481600182811c915080831680610c3157607f831692505b6020808410821415610c5157634e487b7160e01b86526022600452602486fd5b818015610c655760018114610c9457610cc1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650610cc1565b60008a81526020902060005b86811015610cb95781548b820152908501908301610ca0565b505084890196505b509498975050505050505050565b60008219821115610ce257610ce2610bb7565b50019056fea164736f6c6343000809000a",
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906108fc565b60405180910390f35b61011561011036600461096d565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610997565b610338565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61042a565b61012e61019e3660046109d3565b60036020526000908152604090205481565b61012e6101be3660046109d3565b60056020526000908152604090205481565b6100ec610485565b6101156101e636600461096d565b610492565b6101fe6101f93660046109f5565b61050a565b005b61012e61020e366004610a68565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610ab1565b6107b1565b6000805461024b90610b7c565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610b7c565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103945761036f8382610bcd565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b038516600090815260036020526040812080548592906103bc908490610bcd565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104179087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104605761045b6107f7565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610b7c565b336000908152600360205260408120805483919083906104b3908490610bcd565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b42841015610579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b6000600161058561042a565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f19010000000000000000000000000000000000000000000000000000000000006101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156106ac573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106e25750876001600160a01b0316816001600160a01b0316145b610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610570565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b815160005b818110156107f1576107e18482815181106107d3576107d3610be4565b602002602001015184610891565b6107ea81610bfa565b90506107b6565b50505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516108299190610c15565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546108a39190610ccf565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b818110156109295785810183015185820160400152820161090d565b8181111561093b576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461096857600080fd5b919050565b6000806040838503121561098057600080fd5b61098983610951565b946020939093013593505050565b6000806000606084860312156109ac57600080fd5b6109b584610951565b92506109c360208501610951565b9150604084013590509250925092565b6000602082840312156109e557600080fd5b6109ee82610951565b9392505050565b600080600080600080600060e0888a031215610a1057600080fd5b610a1988610951565b9650610a2760208901610951565b95506040880135945060608801359350608088013560ff81168114610a4b57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610a7b57600080fd5b610a8483610951565b9150610a9260208401610951565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610ac457600080fd5b823567ffffffffffffffff80821115610adc57600080fd5b818501915085601f830112610af057600080fd5b8135602082821115610b0457610b04610a9b565b8160051b604051601f19603f83011681018181108682111715610b2957610b29610a9b565b604052928352818301935084810182019289841115610b4757600080fd5b948201945b83861015610b6c57610b5d86610951565b85529482019493820193610b4c565b9997909101359750505050505050565b600181811c90821680610b9057607f821691505b60208210811415610bb157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610bdf57610bdf610bb7565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610c0e57610c0e610bb7565b5060010190565b600080835481600182811c915080831680610c3157607f831692505b6020808410821415610c5157634e487b7160e01b86526022600452602486fd5b818015610c655760018114610c9457610cc1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650610cc1565b60008a81526020902060005b86811015610cb95781548b820152908501908301610ca0565b505084890196505b509498975050505050505050565b60008219821115610ce257610ce2610bb7565b50019056fea164736f6c6343000809000a",
+ "bytecode": "0x60e06040523480156200001157600080fd5b506040516200129938038062001299833981016040819052620000349162000279565b6040805180820182526007815266135bd8dad0949360ca1b6020808301918252835180850190945260048452631350949360e21b908401528151919291601291620000839160009190620001d3565b50815162000099906001906020850190620001d3565b5060ff81166080524660a052620000af620000ca565b60c05250620000c391503390508262000166565b506200039b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000fe9190620002d0565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546200017a919062000374565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620001e19062000293565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b6000602082840312156200028c57600080fd5b5051919050565b600181811c90821680620002a857607f821691505b60208210811415620002ca57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002ed57607f831692505b60208084108214156200030e57634e487b7160e01b86526022600452602486fd5b818015620003255760018114620003375762000366565b60ff1986168952848901965062000366565b60008a81526020902060005b868110156200035e5781548b82015290850190830162000343565b505084890196505b509498975050505050505050565b600082198211156200039657634e487b7160e01b600052601160045260246000fd5b500190565b60805160a05160c051610ece620003cb60003960006104c20152600061048d015260006101540152610ece6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906109f2565b60405180910390f35b610115610110366004610a8e565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610ab8565b610345565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e610489565b61012e61019e366004610af4565b60036020526000908152604090205481565b61012e6101be366004610af4565b60056020526000908152604090205481565b6100ec6104e4565b6101156101e6366004610a8e565b6104f1565b6101fe6101f9366004610b16565b610576565b005b61012e61020e366004610b89565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610beb565b61089a565b6000805461024b90610cd4565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610cd4565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103349086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103d9576103a78382610d57565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260408120805485929061040e908490610d57565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104769087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104bf576104ba6108e0565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610cd4565b33600090815260036020526040812080548391908390610512908490610d57565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103349086815260200190565b428410156105e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b600060016105f1610489565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610743573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107be57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105dc565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b815160005b818110156108da576108ca8482815181106108bc576108bc610d6e565b60200260200101518461097a565b6108d381610d9d565b905061089f565b50505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516109129190610dd6565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b806002600082825461098c9190610ea9565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b81811015610a1f57858101830151858201604001528201610a03565b81811115610a31576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a8957600080fd5b919050565b60008060408385031215610aa157600080fd5b610aaa83610a65565b946020939093013593505050565b600080600060608486031215610acd57600080fd5b610ad684610a65565b9250610ae460208501610a65565b9150604084013590509250925092565b600060208284031215610b0657600080fd5b610b0f82610a65565b9392505050565b600080600080600080600060e0888a031215610b3157600080fd5b610b3a88610a65565b9650610b4860208901610a65565b95506040880135945060608801359350608088013560ff81168114610b6c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610b9c57600080fd5b610ba583610a65565b9150610bb360208401610a65565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610bfe57600080fd5b823567ffffffffffffffff80821115610c1657600080fd5b818501915085601f830112610c2a57600080fd5b8135602082821115610c3e57610c3e610bbc565b8160051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108682111715610c8157610c81610bbc565b604052928352818301935084810182019289841115610c9f57600080fd5b948201945b83861015610cc457610cb586610a65565b85529482019493820193610ca4565b9997909101359750505050505050565b600181811c90821680610ce857607f821691505b60208210811415610d22577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015610d6957610d69610d28565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610dcf57610dcf610d28565b5060010190565b600080835481600182811c915080831680610df257607f831692505b6020808410821415610e2b577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015610e3f5760018114610e6e57610e9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650610e9b565b60008a81526020902060005b86811015610e935781548b820152908501908301610e7a565b505084890196505b509498975050505050505050565b60008219821115610ebc57610ebc610d28565b50019056fea164736f6c6343000809000a",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906109f2565b60405180910390f35b610115610110366004610a8e565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610ab8565b610345565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e610489565b61012e61019e366004610af4565b60036020526000908152604090205481565b61012e6101be366004610af4565b60056020526000908152604090205481565b6100ec6104e4565b6101156101e6366004610a8e565b6104f1565b6101fe6101f9366004610b16565b610576565b005b61012e61020e366004610b89565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610beb565b61089a565b6000805461024b90610cd4565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610cd4565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103349086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103d9576103a78382610d57565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260408120805485929061040e908490610d57565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104769087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104bf576104ba6108e0565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610cd4565b33600090815260036020526040812080548391908390610512908490610d57565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103349086815260200190565b428410156105e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b600060016105f1610489565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610743573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107be57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105dc565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b815160005b818110156108da576108ca8482815181106108bc576108bc610d6e565b60200260200101518461097a565b6108d381610d9d565b905061089f565b50505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516109129190610dd6565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b806002600082825461098c9190610ea9565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b81811015610a1f57858101830151858201604001528201610a03565b81811115610a31576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a8957600080fd5b919050565b60008060408385031215610aa157600080fd5b610aaa83610a65565b946020939093013593505050565b600080600060608486031215610acd57600080fd5b610ad684610a65565b9250610ae460208501610a65565b9150604084013590509250925092565b600060208284031215610b0657600080fd5b610b0f82610a65565b9392505050565b600080600080600080600060e0888a031215610b3157600080fd5b610b3a88610a65565b9650610b4860208901610a65565b95506040880135945060608801359350608088013560ff81168114610b6c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610b9c57600080fd5b610ba583610a65565b9150610bb360208401610a65565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610bfe57600080fd5b823567ffffffffffffffff80821115610c1657600080fd5b818501915085601f830112610c2a57600080fd5b8135602082821115610c3e57610c3e610bbc565b8160051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108682111715610c8157610c81610bbc565b604052928352818301935084810182019289841115610c9f57600080fd5b948201945b83861015610cc457610cb586610a65565b85529482019493820193610ca4565b9997909101359750505050505050565b600181811c90821680610ce857607f821691505b60208210811415610d22577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015610d6957610d69610d28565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610dcf57610dcf610d28565b5060010190565b600080835481600182811c915080831680610df257607f831692505b6020808410821415610e2b577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015610e3f5760018114610e6e57610e9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650610e9b565b60008a81526020902060005b86811015610e935781548b820152908501908301610e7a565b505084890196505b509498975050505050505050565b60008219821115610ebc57610ebc610d28565b50019056fea164736f6c6343000809000a",
"linkReferences": {},
"deployedLinkReferences": {}
}
diff --git a/src/utils/smart_contract_files/P2PIX.json b/src/utils/smart_contract_files/P2PIX.json
index c4fd9f8..16419cd 100644
--- a/src/utils/smart_contract_files/P2PIX.json
+++ b/src/utils/smart_contract_files/P2PIX.json
@@ -49,11 +49,21 @@
"name": "AmountNotAllowed",
"type": "error"
},
+ {
+ "inputs": [],
+ "name": "DecOverflow",
+ "type": "error"
+ },
{
"inputs": [],
"name": "DepositAlreadyExists",
"type": "error"
},
+ {
+ "inputs": [],
+ "name": "EmptyPixTarget",
+ "type": "error"
+ },
{
"inputs": [],
"name": "InvalidDeposit",
@@ -79,6 +89,11 @@
"name": "LoopOverflow",
"type": "error"
},
+ {
+ "inputs": [],
+ "name": "MaxBalExceeded",
+ "type": "error"
+ },
{
"inputs": [],
"name": "NoTokens",
@@ -94,6 +109,11 @@
"name": "NotExpired",
"type": "error"
},
+ {
+ "inputs": [],
+ "name": "NotInitialized",
+ "type": "error"
+ },
{
"inputs": [],
"name": "OnlySeller",
@@ -147,12 +167,6 @@
"name": "seller",
"type": "address"
},
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "depositID",
- "type": "uint256"
- },
{
"indexed": false,
"internalType": "address",
@@ -180,29 +194,10 @@
},
{
"indexed": false,
- "internalType": "uint256",
- "name": "depositID",
- "type": "uint256"
- }
- ],
- "name": "DepositClosed",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
"internalType": "address",
- "name": "seller",
+ "name": "token",
"type": "address"
},
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "depositID",
- "type": "uint256"
- },
{
"indexed": false,
"internalType": "uint256",
@@ -243,14 +238,14 @@
},
{
"indexed": true,
- "internalType": "bytes32",
+ "internalType": "uint256",
"name": "lockID",
- "type": "bytes32"
+ "type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
- "name": "depositID",
+ "name": "seller",
"type": "uint256"
},
{
@@ -287,9 +282,9 @@
},
{
"indexed": false,
- "internalType": "bytes32",
+ "internalType": "uint256",
"name": "lockId",
- "type": "bytes32"
+ "type": "uint256"
},
{
"indexed": false,
@@ -312,9 +307,9 @@
},
{
"indexed": false,
- "internalType": "bytes32",
+ "internalType": "uint256",
"name": "lockId",
- "type": "bytes32"
+ "type": "uint256"
}
],
"name": "LockReturned",
@@ -371,6 +366,31 @@
"name": "RootUpdated",
"type": "event"
},
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "state",
+ "type": "bool"
+ }
+ ],
+ "name": "ValidSet",
+ "type": "event"
+ },
{
"anonymous": false,
"inputs": [
@@ -416,6 +436,25 @@
"stateMutability": "pure",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_key",
+ "type": "uint256"
+ }
+ ],
+ "name": "_castKeyToAddr",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "_addr",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -435,19 +474,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "depositID",
- "type": "uint256"
- }
- ],
- "name": "cancelDeposit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [],
"name": "defaultLockBlocks",
@@ -469,14 +495,19 @@
"type": "address"
},
{
- "internalType": "uint256",
+ "internalType": "uint96",
"name": "_amount",
- "type": "uint256"
+ "type": "uint96"
},
{
- "internalType": "string",
+ "internalType": "uint160",
"name": "_pixTarget",
- "type": "string"
+ "type": "uint160"
+ },
+ {
+ "internalType": "bool",
+ "name": "_valid",
+ "type": "bool"
},
{
"internalType": "bytes32",
@@ -485,23 +516,28 @@
}
],
"name": "deposit",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "depositID",
- "type": "uint256"
- }
- ],
+ "outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
- "inputs": [],
- "name": "depositCount",
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "contract ERC20",
+ "name": "token",
+ "type": "address"
+ }
+ ],
+ "name": "getBalance",
"outputs": [
{
"internalType": "uint256",
- "name": "_val",
+ "name": "bal",
"type": "uint256"
}
],
@@ -511,9 +547,110 @@
{
"inputs": [
{
- "internalType": "uint256",
- "name": "_depositID",
- "type": "uint256"
+ "internalType": "address[]",
+ "name": "sellers",
+ "type": "address[]"
+ },
+ {
+ "internalType": "contract ERC20",
+ "name": "token",
+ "type": "address"
+ }
+ ],
+ "name": "getBalances",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "getLocksStatus",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "enum DataTypes.LockStatus[]",
+ "name": "",
+ "type": "uint8[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "contract ERC20",
+ "name": "token",
+ "type": "address"
+ }
+ ],
+ "name": "getPixTarget",
+ "outputs": [
+ {
+ "internalType": "uint160",
+ "name": "pixTarget",
+ "type": "uint160"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "contract ERC20",
+ "name": "token",
+ "type": "address"
+ }
+ ],
+ "name": "getValid",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "valid",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_token",
+ "type": "address"
},
{
"internalType": "address",
@@ -541,56 +678,30 @@
"type": "bytes32[]"
},
{
- "internalType": "bytes32[]",
+ "internalType": "uint256[]",
"name": "expiredLocks",
- "type": "bytes32[]"
+ "type": "uint256[]"
}
],
"name": "lock",
"outputs": [
- {
- "internalType": "bytes32",
- "name": "lockID",
- "type": "bytes32"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
- "name": "mapDeposits",
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "lockCounter",
"outputs": [
{
"internalType": "uint256",
- "name": "remaining",
+ "name": "",
"type": "uint256"
- },
- {
- "internalType": "string",
- "name": "pixTarget",
- "type": "string"
- },
- {
- "internalType": "address",
- "name": "seller",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "token",
- "type": "address"
- },
- {
- "internalType": "bool",
- "name": "valid",
- "type": "bool"
}
],
"stateMutability": "view",
@@ -599,16 +710,21 @@
{
"inputs": [
{
- "internalType": "bytes32",
+ "internalType": "uint256",
"name": "",
- "type": "bytes32"
+ "type": "uint256"
}
],
"name": "mapLocks",
"outputs": [
{
"internalType": "uint256",
- "name": "depositID",
+ "name": "sellerKey",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "counter",
"type": "uint256"
},
{
@@ -626,6 +742,11 @@
"name": "expirationBlock",
"type": "uint256"
},
+ {
+ "internalType": "uint160",
+ "name": "pixTarget",
+ "type": "uint160"
+ },
{
"internalType": "address",
"name": "buyerAddress",
@@ -640,6 +761,11 @@
"internalType": "address",
"name": "relayerAddress",
"type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
}
],
"stateMutability": "view",
@@ -661,9 +787,9 @@
{
"inputs": [
{
- "internalType": "bytes32",
+ "internalType": "uint256",
"name": "lockID",
- "type": "bytes32"
+ "type": "uint256"
},
{
"internalType": "address",
@@ -728,6 +854,30 @@
"stateMutability": "view",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract ERC20",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "sellerBalance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -798,6 +948,24 @@
"stateMutability": "nonpayable",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "contract ERC20",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "state",
+ "type": "bool"
+ }
+ ],
+ "name": "setValidState",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -819,9 +987,9 @@
{
"inputs": [
{
- "internalType": "bytes32[]",
+ "internalType": "uint256[]",
"name": "lockIDs",
- "type": "bytes32[]"
+ "type": "uint256[]"
}
],
"name": "unlockExpired",
@@ -888,15 +1056,20 @@
},
{
"inputs": [
+ {
+ "internalType": "contract ERC20",
+ "name": "token",
+ "type": "address"
+ },
{
"internalType": "uint256",
- "name": "depositID",
+ "name": "amount",
"type": "uint256"
},
{
- "internalType": "bytes32[]",
+ "internalType": "uint256[]",
"name": "expiredLocks",
- "type": "bytes32[]"
+ "type": "uint256[]"
}
],
"name": "withdraw",
@@ -916,8 +1089,8 @@
"type": "receive"
}
],
- "bytecode": "0x60806040526001805560405162002a9a38038062002a9a8339810160408190526200002a916200049d565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3506200007685620000a3565b620000818362000133565b6200008c84620001bd565b620000988282620002a1565b505050505062000620565b6000546001600160a01b03163314620000f25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516200012891815260200190565b60405180910390a150565b6000546001600160a01b031633146200017e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200162000128565b6000546001600160a01b03163314620002085760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b80516000905b808210156200026e57600062000246848481518110620002325762000232620005bb565b60200260200101516200038760201b60201c565b6000908152600660205260409020805460ff191660019081179091559290920191506200020e565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051620001289190620005d1565b6000546001600160a01b03163314620002ec5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b815180620003025763df9578836000526004601cfd5b81518114620003195763ff633a386000526004601cfd5b60208301602083016020830282015b8083146200037f578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915062000328565b505050505050565b600c1b611000600160ac1b031690565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003d857620003d862000397565b604052919050565b60006001600160401b03821115620003fc57620003fc62000397565b5060051b60200190565b6001600160a01b03811681146200041c57600080fd5b50565b600082601f8301126200043157600080fd5b815160206200044a6200044483620003e0565b620003ad565b82815260059290921b840181019181810190868411156200046a57600080fd5b8286015b8481101562000492578051620004848162000406565b83529183019183016200046e565b509695505050505050565b600080600080600060a08688031215620004b657600080fd5b8551602080880151919650906001600160401b0380821115620004d857600080fd5b620004e68a838b016200041f565b965060408901519150620004fa8262000406565b6060890151919550808211156200051057600080fd5b6200051e8a838b016200041f565b945060808901519150808211156200053557600080fd5b508701601f810189136200054857600080fd5b8051620005596200044482620003e0565b81815260059190911b8201830190838101908b8311156200057957600080fd5b928401925b82841015620005a95783518015158114620005995760008081fd5b825292840192908401906200057e565b80955050505050509295509295909350565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015620006145783516001600160a01b031683529284019291840191600101620005ed565b50909695505050505050565b61246a80620006306000396000f3fe6080604052600436106101a55760003560e01c806372fada5c116100e15780638e2749d61161008a57806398a268711161006457806398a268711461056b578063c52164c61461059b578063d6e8b973146105bb578063f7d0e04b146105db57600080fd5b80638e2749d6146105045780638e2a3d36146105245780639872dbfe1461055557600080fd5b80637f94f65d116100bb5780637f94f65d1461048c5780638652b37e146104ac5780638da5cb5b146104cc57600080fd5b806372fada5c1461041f578063758d77d41461043f57806377cd38a41461045f57600080fd5b8063363179721161014e578063574983c811610128578063574983c81461039e5780635fd8c710146103be57806369cc6af4146103d35780636a1460241461040357600080fd5b80633631797214610313578063461f3120146103335780634b2ae9801461037357600080fd5b806316d722401161017f57806316d722401461023357806329cc7d10146102dc5780632dfdf0b5146102fc57600080fd5b806304937320146101b15780630d2a2d44146101f157806313af40351461021357600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101de6101cc366004611d07565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101fd57600080fd5b5061021161020c366004611e14565b6105fb565b005b34801561021f57600080fd5b5061021161022e366004611e51565b6106ec565b34801561023f57600080fd5b5061029861024e366004611d07565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391926001600160a01b03918216928216911687565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03908116608085015290811660a08401521660c082015260e0016101e8565b3480156102e857600080fd5b506101de6102f7366004611e6e565b61078d565b34801561030857600080fd5b506003546101de9081565b34801561031f57600080fd5b5061021161032e366004611f4b565b610991565b34801561033f57600080fd5b5061036361034e366004611d07565b60096020526000908152604090205460ff1681565b60405190151581526020016101e8565b34801561037f57600080fd5b506101de61038e366004611e51565b600c1b611000600160ac1b031690565b3480156103aa57600080fd5b506102116103b9366004611d07565b610a51565b3480156103ca57600080fd5b50610211610acf565b3480156103df57600080fd5b506103636103ee366004611e51565b600b6020526000908152604090205460ff1681565b34801561040f57600080fd5b506101de670de0b6b3a764000081565b34801561042b57600080fd5b5061021161043a366004611d07565b610b59565b34801561044b57600080fd5b5061021161045a366004611f97565b610be1565b34801561046b57600080fd5b506101de61047a366004611d07565b600a6020526000908152604090205481565b34801561049857600080fd5b506102116104a7366004611ffb565b61103a565b3480156104b857600080fd5b506101de6104c7366004612027565b6110e6565b3480156104d857600080fd5b506000546104ec906001600160a01b031681565b6040516001600160a01b0390911681526020016101e8565b34801561051057600080fd5b5061021161051f3660046120db565b611311565b34801561053057600080fd5b5061054461053f366004611d07565b611479565b6040516101e895949392919061211d565b34801561056157600080fd5b506101de60045481565b34801561057757600080fd5b50610363610586366004611d07565b60066020526000908152604090205460ff1681565b3480156105a757600080fd5b506002546104ec906001600160a01b031681565b3480156105c757600080fd5b506102116105d63660046121aa565b611543565b3480156105e757600080fd5b506102116105f6366004611e51565b61161b565b6000546001600160a01b031633146106495760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b80516000905b808210156106b057600061068984848151811061066e5761066e612274565b6020026020010151611000600160ac1b03600c9190911b1690565b6000908152600660205260409020805460ff1916600190811790915592909201915061064f565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d7816040516106e1919061228a565b60405180910390a150565b6000546001600160a01b031633146107355760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610640565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6001600160a01b0385166000908152600b6020526040812054869060ff166107e1576040517f1578328e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e96116a2565b915060006040518060a0016040528088815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038a1660408201526001606090910152905061085e6116b2565b831561086e5761086e338561103a565b600083815260076020908152604090912082518155818301518051849361089c926001850192910190611c6e565b5060408201516002820180546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff199091161790556060830151600392830180546080909501511515600160a01b027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169190921617929092179091556109269080546001019055565b6109328233308a6116f6565b61093b60018055565b604080518481526001600160a01b038a16602082015290810188905233907f25ac57b911b0f66b64c294827f539545fbc3ddd002cafab117776274f3241e4c9060600160405180910390a2505095945050505050565b6109996116b2565b6109a2836117a6565b6109ac8282611311565b60008381526007602052604090206003810154600160a01b900460ff161515600114156109dc576109dc84610b59565b600381015481546000835560028301546001600160a01b0392831692610a0591849116836117fc565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a2505050610a4c60018055565b505050565b6000546001600160a01b03163314610a9a5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610640565b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516106e191815260200190565b6000546001600160a01b03163314610b185760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610640565b47610b2333826118a1565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91016106e1565b610b62816117a6565b6000818152600760209081526040918290206003810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556002015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b610be96116b2565b60008681526008602052604090206002810154610c32576040517f63b4904e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4381600301541015610c70576040517ff6fafba000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054600090815260076020908152604080832060028501549151909392610ca092600186019290918b9101612312565b604051602081830303815290604052805190602001209050600081604051602001610cf791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600990935291205490915060ff16151560011415610d5e576040517ff490a6ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820180845284905260ff8816928201929092526060810189905260808101889052610dd29060019060a0016020604051602081039080840390855afa158015610db6573d6000803e3d6000fd5b5050604051601f190151600c1b611000600160ac1b0316919050565b60008181526006602052604090205490915060ff16610e1d576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003840154600286015460018701546001600160a01b0390921691600090610e4590836123cf565b600060028a0181905560038a01819055878152600960205260409020805460ff191660011790556006890154909150336001600160a01b0390911614610ef6576001880154611000600160ac1b0333600c1b1660009081526005602052604081208054909190610eb69084906123e6565b90915550506006880154600c1b611000600160ac1b031660009081526005602052604081208054849290610eeb9084906123e6565b90915550610f389050565b818860010154610f0691906123e6565b611000600160ac1b0333600c1b1660009081526005602052604081208054909190610f329084906123e6565b90915550505b6004880154610f529084906001600160a01b0316836117fc565b600188015415610fbe5760058801546001600160a01b038e8116911614610faf5760058801546001808a0154610f979286926001600160a01b0390911691901c6117fc565b610faa838e60018b60010154901c6117fc565b610fbe565b610fbe838e8a600101546117fc565b8760040160009054906101000a90046001600160a01b03166001600160a01b03167f3fd2eee5028b09fa70abe3da4f6023ea41bfde24cfcb9c167f17d6fbe79eece38f84604051611019929190918252602082015260400190565b60405180910390a2505050505050505061103260018055565b505050505050565b6001600160a01b0382163314156110b457611000600160ac1b03600c83901b166000908152600a602090815260409182902083905581516001600160a01b038516815290810183905281517f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632929181900390910190a15050565b6040517f85d1f72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110f06116b2565b6110fa8383611311565b60008a81526007602052604090206003810154600160a01b900460ff1661114d576040517fb2e532de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054871115611188576040517f22bbb43c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111938b888c6118fc565b915060006040518060e001604052808d81526020018a8152602001898152602001600454436111c291906123e6565b81526001600160a01b03808e1660208301528c166040820152336060909101529050851561122b576002820154600c1b611000600160ac1b03166000908152600a60205260409020546112199088908890336119ac565b6112248382846119f7565b50506112fb565b68056bc75e2d6310000081604001511161124a576112248382846119f7565b611000600160ac1b0333600c1b166000908152600560205260408120549061128261127d670de0b6b3a7640000846123fe565b611af5565b9050611296670de0b6b3a764000082612420565b836040015111806112b4575069d3c21bcecceda10000008360400151115b156112eb576040517f1c18f84600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112f68584866119f7565b505050505b61130460018055565b9998505050505050505050565b6000815b8082101561145d5760006008600086868681811061133557611335612274565b905060200201358152602001908152602001600020905061135581611bb1565b600281015481546000908152600760205260408120805490919061137a9084906123e6565b90915550506000600282018190556006820154600c1b611000600160ac1b031660008181526005602052604090205490915060011c68056bc75e2d6310000081116113de57600082815260056020526040902068056bc75e2d6310000090556113f0565b60008281526005602052604090208190555b60048301546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff88888881811061143157611431612274565b9050602002013560405161144791815260200190565b60405180910390a2846001019450505050611315565b808210156114735763dfb035c96000526004601cfd5b50505050565b6007602052600090815260409020805460018201805491929161149b906122d7565b80601f01602080910402602001604051908101604052809291908181526020018280546114c7906122d7565b80156115145780601f106114e957610100808354040283529160200191611514565b820191906000526020600020905b8154815290600101906020018083116114f757829003601f168201915b50505050600283015460039093015491926001600160a01b03908116929081169150600160a01b900460ff1685565b6000546001600160a01b0316331461158c5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610640565b8151806115a15763df9578836000526004601cfd5b815181146115b75763ff633a386000526004601cfd5b60208301602083016020830282015b808314611032578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a36020830192506020820191506115c6565b6000546001600160a01b031633146116645760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610640565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f906020016106e1565b60006116ad60035490565b905090565b600154600214156116ef576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b60006040517f23b872dd000000000000000000000000000000000000000000000000000000006000528460045283602452826044526020600060646000808a5af13d15601f3d116001600051141617169150600060605280604052508061179f5760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610640565b5050505050565b6000818152600760205260409020600201546001600160a01b031633146117f9576040517f85d1f72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000006000528360045282602452602060006044600080895af13d15601f3d11600160005114161716915060006060528060405250806114735760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610640565b600080600080600085875af1905080610a4c5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610640565b6040805160208101859052908101839052606082811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690820152600090607401604051602081830303815290604052805190602001209050436008600083815260200190815260200160002060030154106119a5576040517fd0404f8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9392505050565b6119c18484846001600160a01b038516611c2a565b611473576040517f3b8474be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083815260086020908152604080832085518155918501516001830155840151600282018190556060850151600383015560808501516004830180546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff199182161790915560a087015160058501805491841691831691909117905560c08701516006909401805494909216931692909217909155825490918391611a9d9084906123cf565b9091555050608082015182516040808501518151928352602083015285926001600160a01b0316917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a3505050565b600080634d2b179160e01b83604051602401611b1391815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600080600060206000855160208701600254617530fa92503d9150600051905080945082611ba85763e10bf1cc6000526004601cfd5b50505050919050565b4381600301541115611bef576040517fd0404f8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028101546117f9576040517f63b4904e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008315611c66578360051b8501855b803580851160051b94855260209485185260406000209301818110611c5e57611c63565b611c3a565b50505b501492915050565b828054611c7a906122d7565b90600052602060002090601f016020900481019282611c9c5760008555611ce2565b82601f10611cb557805160ff1916838001178555611ce2565b82800160010185558215611ce2579182015b82811115611ce2578251825591602001919060010190611cc7565b50611cee929150611cf2565b5090565b5b80821115611cee5760008155600101611cf3565b600060208284031215611d1957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d5f57611d5f611d20565b604052919050565b600067ffffffffffffffff821115611d8157611d81611d20565b5060051b60200190565b6001600160a01b03811681146117f957600080fd5b600082601f830112611db157600080fd5b81356020611dc6611dc183611d67565b611d36565b82815260059290921b84018101918181019086841115611de557600080fd5b8286015b84811015611e09578035611dfc81611d8b565b8352918301918301611de9565b509695505050505050565b600060208284031215611e2657600080fd5b813567ffffffffffffffff811115611e3d57600080fd5b611e4984828501611da0565b949350505050565b600060208284031215611e6357600080fd5b81356119a581611d8b565b600080600080600060808688031215611e8657600080fd5b8535611e9181611d8b565b945060208601359350604086013567ffffffffffffffff80821115611eb557600080fd5b818801915088601f830112611ec957600080fd5b813581811115611ed857600080fd5b896020828501011115611eea57600080fd5b96999598505060200195606001359392505050565b60008083601f840112611f1157600080fd5b50813567ffffffffffffffff811115611f2957600080fd5b6020830191508360208260051b8501011115611f4457600080fd5b9250929050565b600080600060408486031215611f6057600080fd5b83359250602084013567ffffffffffffffff811115611f7e57600080fd5b611f8a86828701611eff565b9497909650939450505050565b60008060008060008060c08789031215611fb057600080fd5b863595506020870135611fc281611d8b565b945060408701359350606087013592506080870135915060a087013560ff81168114611fed57600080fd5b809150509295509295509295565b6000806040838503121561200e57600080fd5b823561201981611d8b565b946020939093013593505050565b600080600080600080600080600060e08a8c03121561204557600080fd5b8935985060208a013561205781611d8b565b975060408a013561206781611d8b565b965060608a0135955060808a0135945060a08a013567ffffffffffffffff8082111561209257600080fd5b61209e8d838e01611eff565b909650945060c08c01359150808211156120b757600080fd5b506120c48c828d01611eff565b915080935050809150509295985092959850929598565b600080602083850312156120ee57600080fd5b823567ffffffffffffffff81111561210557600080fd5b61211185828601611eff565b90969095509350505050565b8581526000602060a08184015286518060a085015260005b818110156121515788810183015185820160c001528201612135565b8181111561216357600060c083870101525b50601f01601f1916830160c0019150612189905060408301866001600160a01b03169052565b6001600160a01b038416606083015282151560808301529695505050505050565b600080604083850312156121bd57600080fd5b823567ffffffffffffffff808211156121d557600080fd5b6121e186838701611da0565b93506020915081850135818111156121f857600080fd5b85019050601f8101861361220b57600080fd5b8035612219611dc182611d67565b81815260059190911b8201830190838101908883111561223857600080fd5b928401925b8284101561226557833580151581146122565760008081fd5b8252928401929084019061223d565b80955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156122cb5783516001600160a01b0316835292840192918401916001016122a6565b50909695505050505050565b600181811c908216806122eb57607f821691505b6020821081141561230c57634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061232e57607f831692505b602080841082141561234e57634e487b7160e01b86526022600452602486fd5b8180156123625760018114612373576123a0565b60ff198616895284890196506123a0565b60008c81526020902060005b868110156123985781548b82015290850190830161237f565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156123e1576123e16123b9565b500390565b600082198211156123f9576123f96123b9565b500190565b60008261241b57634e487b7160e01b600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612458576124586123b9565b50029056fea164736f6c6343000809000a",
- "deployedBytecode": "0x6080604052600436106101a55760003560e01c806372fada5c116100e15780638e2749d61161008a57806398a268711161006457806398a268711461056b578063c52164c61461059b578063d6e8b973146105bb578063f7d0e04b146105db57600080fd5b80638e2749d6146105045780638e2a3d36146105245780639872dbfe1461055557600080fd5b80637f94f65d116100bb5780637f94f65d1461048c5780638652b37e146104ac5780638da5cb5b146104cc57600080fd5b806372fada5c1461041f578063758d77d41461043f57806377cd38a41461045f57600080fd5b8063363179721161014e578063574983c811610128578063574983c81461039e5780635fd8c710146103be57806369cc6af4146103d35780636a1460241461040357600080fd5b80633631797214610313578063461f3120146103335780634b2ae9801461037357600080fd5b806316d722401161017f57806316d722401461023357806329cc7d10146102dc5780632dfdf0b5146102fc57600080fd5b806304937320146101b15780630d2a2d44146101f157806313af40351461021357600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101de6101cc366004611d07565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101fd57600080fd5b5061021161020c366004611e14565b6105fb565b005b34801561021f57600080fd5b5061021161022e366004611e51565b6106ec565b34801561023f57600080fd5b5061029861024e366004611d07565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391926001600160a01b03918216928216911687565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03908116608085015290811660a08401521660c082015260e0016101e8565b3480156102e857600080fd5b506101de6102f7366004611e6e565b61078d565b34801561030857600080fd5b506003546101de9081565b34801561031f57600080fd5b5061021161032e366004611f4b565b610991565b34801561033f57600080fd5b5061036361034e366004611d07565b60096020526000908152604090205460ff1681565b60405190151581526020016101e8565b34801561037f57600080fd5b506101de61038e366004611e51565b600c1b611000600160ac1b031690565b3480156103aa57600080fd5b506102116103b9366004611d07565b610a51565b3480156103ca57600080fd5b50610211610acf565b3480156103df57600080fd5b506103636103ee366004611e51565b600b6020526000908152604090205460ff1681565b34801561040f57600080fd5b506101de670de0b6b3a764000081565b34801561042b57600080fd5b5061021161043a366004611d07565b610b59565b34801561044b57600080fd5b5061021161045a366004611f97565b610be1565b34801561046b57600080fd5b506101de61047a366004611d07565b600a6020526000908152604090205481565b34801561049857600080fd5b506102116104a7366004611ffb565b61103a565b3480156104b857600080fd5b506101de6104c7366004612027565b6110e6565b3480156104d857600080fd5b506000546104ec906001600160a01b031681565b6040516001600160a01b0390911681526020016101e8565b34801561051057600080fd5b5061021161051f3660046120db565b611311565b34801561053057600080fd5b5061054461053f366004611d07565b611479565b6040516101e895949392919061211d565b34801561056157600080fd5b506101de60045481565b34801561057757600080fd5b50610363610586366004611d07565b60066020526000908152604090205460ff1681565b3480156105a757600080fd5b506002546104ec906001600160a01b031681565b3480156105c757600080fd5b506102116105d63660046121aa565b611543565b3480156105e757600080fd5b506102116105f6366004611e51565b61161b565b6000546001600160a01b031633146106495760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b80516000905b808210156106b057600061068984848151811061066e5761066e612274565b6020026020010151611000600160ac1b03600c9190911b1690565b6000908152600660205260409020805460ff1916600190811790915592909201915061064f565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d7816040516106e1919061228a565b60405180910390a150565b6000546001600160a01b031633146107355760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610640565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6001600160a01b0385166000908152600b6020526040812054869060ff166107e1576040517f1578328e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e96116a2565b915060006040518060a0016040528088815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038a1660408201526001606090910152905061085e6116b2565b831561086e5761086e338561103a565b600083815260076020908152604090912082518155818301518051849361089c926001850192910190611c6e565b5060408201516002820180546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff199091161790556060830151600392830180546080909501511515600160a01b027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169190921617929092179091556109269080546001019055565b6109328233308a6116f6565b61093b60018055565b604080518481526001600160a01b038a16602082015290810188905233907f25ac57b911b0f66b64c294827f539545fbc3ddd002cafab117776274f3241e4c9060600160405180910390a2505095945050505050565b6109996116b2565b6109a2836117a6565b6109ac8282611311565b60008381526007602052604090206003810154600160a01b900460ff161515600114156109dc576109dc84610b59565b600381015481546000835560028301546001600160a01b0392831692610a0591849116836117fc565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a2505050610a4c60018055565b505050565b6000546001600160a01b03163314610a9a5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610640565b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516106e191815260200190565b6000546001600160a01b03163314610b185760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610640565b47610b2333826118a1565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91016106e1565b610b62816117a6565b6000818152600760209081526040918290206003810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556002015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b610be96116b2565b60008681526008602052604090206002810154610c32576040517f63b4904e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4381600301541015610c70576040517ff6fafba000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054600090815260076020908152604080832060028501549151909392610ca092600186019290918b9101612312565b604051602081830303815290604052805190602001209050600081604051602001610cf791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600990935291205490915060ff16151560011415610d5e576040517ff490a6ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820180845284905260ff8816928201929092526060810189905260808101889052610dd29060019060a0016020604051602081039080840390855afa158015610db6573d6000803e3d6000fd5b5050604051601f190151600c1b611000600160ac1b0316919050565b60008181526006602052604090205490915060ff16610e1d576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003840154600286015460018701546001600160a01b0390921691600090610e4590836123cf565b600060028a0181905560038a01819055878152600960205260409020805460ff191660011790556006890154909150336001600160a01b0390911614610ef6576001880154611000600160ac1b0333600c1b1660009081526005602052604081208054909190610eb69084906123e6565b90915550506006880154600c1b611000600160ac1b031660009081526005602052604081208054849290610eeb9084906123e6565b90915550610f389050565b818860010154610f0691906123e6565b611000600160ac1b0333600c1b1660009081526005602052604081208054909190610f329084906123e6565b90915550505b6004880154610f529084906001600160a01b0316836117fc565b600188015415610fbe5760058801546001600160a01b038e8116911614610faf5760058801546001808a0154610f979286926001600160a01b0390911691901c6117fc565b610faa838e60018b60010154901c6117fc565b610fbe565b610fbe838e8a600101546117fc565b8760040160009054906101000a90046001600160a01b03166001600160a01b03167f3fd2eee5028b09fa70abe3da4f6023ea41bfde24cfcb9c167f17d6fbe79eece38f84604051611019929190918252602082015260400190565b60405180910390a2505050505050505061103260018055565b505050505050565b6001600160a01b0382163314156110b457611000600160ac1b03600c83901b166000908152600a602090815260409182902083905581516001600160a01b038516815290810183905281517f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632929181900390910190a15050565b6040517f85d1f72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110f06116b2565b6110fa8383611311565b60008a81526007602052604090206003810154600160a01b900460ff1661114d576040517fb2e532de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054871115611188576040517f22bbb43c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111938b888c6118fc565b915060006040518060e001604052808d81526020018a8152602001898152602001600454436111c291906123e6565b81526001600160a01b03808e1660208301528c166040820152336060909101529050851561122b576002820154600c1b611000600160ac1b03166000908152600a60205260409020546112199088908890336119ac565b6112248382846119f7565b50506112fb565b68056bc75e2d6310000081604001511161124a576112248382846119f7565b611000600160ac1b0333600c1b166000908152600560205260408120549061128261127d670de0b6b3a7640000846123fe565b611af5565b9050611296670de0b6b3a764000082612420565b836040015111806112b4575069d3c21bcecceda10000008360400151115b156112eb576040517f1c18f84600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112f68584866119f7565b505050505b61130460018055565b9998505050505050505050565b6000815b8082101561145d5760006008600086868681811061133557611335612274565b905060200201358152602001908152602001600020905061135581611bb1565b600281015481546000908152600760205260408120805490919061137a9084906123e6565b90915550506000600282018190556006820154600c1b611000600160ac1b031660008181526005602052604090205490915060011c68056bc75e2d6310000081116113de57600082815260056020526040902068056bc75e2d6310000090556113f0565b60008281526005602052604090208190555b60048301546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff88888881811061143157611431612274565b9050602002013560405161144791815260200190565b60405180910390a2846001019450505050611315565b808210156114735763dfb035c96000526004601cfd5b50505050565b6007602052600090815260409020805460018201805491929161149b906122d7565b80601f01602080910402602001604051908101604052809291908181526020018280546114c7906122d7565b80156115145780601f106114e957610100808354040283529160200191611514565b820191906000526020600020905b8154815290600101906020018083116114f757829003601f168201915b50505050600283015460039093015491926001600160a01b03908116929081169150600160a01b900460ff1685565b6000546001600160a01b0316331461158c5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610640565b8151806115a15763df9578836000526004601cfd5b815181146115b75763ff633a386000526004601cfd5b60208301602083016020830282015b808314611032578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a36020830192506020820191506115c6565b6000546001600160a01b031633146116645760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610640565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f906020016106e1565b60006116ad60035490565b905090565b600154600214156116ef576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b60006040517f23b872dd000000000000000000000000000000000000000000000000000000006000528460045283602452826044526020600060646000808a5af13d15601f3d116001600051141617169150600060605280604052508061179f5760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610640565b5050505050565b6000818152600760205260409020600201546001600160a01b031633146117f9576040517f85d1f72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000006000528360045282602452602060006044600080895af13d15601f3d11600160005114161716915060006060528060405250806114735760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610640565b600080600080600085875af1905080610a4c5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610640565b6040805160208101859052908101839052606082811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690820152600090607401604051602081830303815290604052805190602001209050436008600083815260200190815260200160002060030154106119a5576040517fd0404f8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9392505050565b6119c18484846001600160a01b038516611c2a565b611473576040517f3b8474be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083815260086020908152604080832085518155918501516001830155840151600282018190556060850151600383015560808501516004830180546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff199182161790915560a087015160058501805491841691831691909117905560c08701516006909401805494909216931692909217909155825490918391611a9d9084906123cf565b9091555050608082015182516040808501518151928352602083015285926001600160a01b0316917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a3505050565b600080634d2b179160e01b83604051602401611b1391815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600080600060206000855160208701600254617530fa92503d9150600051905080945082611ba85763e10bf1cc6000526004601cfd5b50505050919050565b4381600301541115611bef576040517fd0404f8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028101546117f9576040517f63b4904e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008315611c66578360051b8501855b803580851160051b94855260209485185260406000209301818110611c5e57611c63565b611c3a565b50505b501492915050565b828054611c7a906122d7565b90600052602060002090601f016020900481019282611c9c5760008555611ce2565b82601f10611cb557805160ff1916838001178555611ce2565b82800160010185558215611ce2579182015b82811115611ce2578251825591602001919060010190611cc7565b50611cee929150611cf2565b5090565b5b80821115611cee5760008155600101611cf3565b600060208284031215611d1957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d5f57611d5f611d20565b604052919050565b600067ffffffffffffffff821115611d8157611d81611d20565b5060051b60200190565b6001600160a01b03811681146117f957600080fd5b600082601f830112611db157600080fd5b81356020611dc6611dc183611d67565b611d36565b82815260059290921b84018101918181019086841115611de557600080fd5b8286015b84811015611e09578035611dfc81611d8b565b8352918301918301611de9565b509695505050505050565b600060208284031215611e2657600080fd5b813567ffffffffffffffff811115611e3d57600080fd5b611e4984828501611da0565b949350505050565b600060208284031215611e6357600080fd5b81356119a581611d8b565b600080600080600060808688031215611e8657600080fd5b8535611e9181611d8b565b945060208601359350604086013567ffffffffffffffff80821115611eb557600080fd5b818801915088601f830112611ec957600080fd5b813581811115611ed857600080fd5b896020828501011115611eea57600080fd5b96999598505060200195606001359392505050565b60008083601f840112611f1157600080fd5b50813567ffffffffffffffff811115611f2957600080fd5b6020830191508360208260051b8501011115611f4457600080fd5b9250929050565b600080600060408486031215611f6057600080fd5b83359250602084013567ffffffffffffffff811115611f7e57600080fd5b611f8a86828701611eff565b9497909650939450505050565b60008060008060008060c08789031215611fb057600080fd5b863595506020870135611fc281611d8b565b945060408701359350606087013592506080870135915060a087013560ff81168114611fed57600080fd5b809150509295509295509295565b6000806040838503121561200e57600080fd5b823561201981611d8b565b946020939093013593505050565b600080600080600080600080600060e08a8c03121561204557600080fd5b8935985060208a013561205781611d8b565b975060408a013561206781611d8b565b965060608a0135955060808a0135945060a08a013567ffffffffffffffff8082111561209257600080fd5b61209e8d838e01611eff565b909650945060c08c01359150808211156120b757600080fd5b506120c48c828d01611eff565b915080935050809150509295985092959850929598565b600080602083850312156120ee57600080fd5b823567ffffffffffffffff81111561210557600080fd5b61211185828601611eff565b90969095509350505050565b8581526000602060a08184015286518060a085015260005b818110156121515788810183015185820160c001528201612135565b8181111561216357600060c083870101525b50601f01601f1916830160c0019150612189905060408301866001600160a01b03169052565b6001600160a01b038416606083015282151560808301529695505050505050565b600080604083850312156121bd57600080fd5b823567ffffffffffffffff808211156121d557600080fd5b6121e186838701611da0565b93506020915081850135818111156121f857600080fd5b85019050601f8101861361220b57600080fd5b8035612219611dc182611d67565b81815260059190911b8201830190838101908883111561223857600080fd5b928401925b8284101561226557833580151581146122565760008081fd5b8252928401929084019061223d565b80955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156122cb5783516001600160a01b0316835292840192918401916001016122a6565b50909695505050505050565b600181811c908216806122eb57607f821691505b6020821081141561230c57634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061232e57607f831692505b602080841082141561234e57634e487b7160e01b86526022600452602486fd5b8180156123625760018114612373576123a0565b60ff198616895284890196506123a0565b60008c81526020902060005b868110156123985781548b82015290850190830161237f565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156123e1576123e16123b9565b500390565b600082198211156123f9576123f96123b9565b500190565b60008261241b57634e487b7160e01b600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612458576124586123b9565b50029056fea164736f6c6343000809000a",
+ "bytecode": "0x6080604052600180556040516200366e3803806200366e8339810160408190526200002a9162000493565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3506200007685620000a3565b620000818362000133565b6200008c84620001bd565b620000988282620002a1565b505050505062000616565b6000546001600160a01b03163314620000f25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b806003557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516200012891815260200190565b60405180910390a150565b6000546001600160a01b031633146200017e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200162000128565b6000546001600160a01b03163314620002085760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b80516000905b808210156200026e57600062000246848481518110620002325762000232620005b1565b60200260200101516200038760201b60201c565b6000908152600860205260409020805460ff191660019081179091559290920191506200020e565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051620001289190620005c7565b6000546001600160a01b03163314620002ec5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b815180620003025763df9578836000526004601cfd5b81518114620003195763ff633a386000526004601cfd5b60208301602083018260051b82015b8083146200037f578251600052600a60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915062000328565b505050505050565b600c1b90565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003ce57620003ce6200038d565b604052919050565b60006001600160401b03821115620003f257620003f26200038d565b5060051b60200190565b6001600160a01b03811681146200041257600080fd5b50565b600082601f8301126200042757600080fd5b81516020620004406200043a83620003d6565b620003a3565b82815260059290921b840181019181810190868411156200046057600080fd5b8286015b84811015620004885780516200047a81620003fc565b835291830191830162000464565b509695505050505050565b600080600080600060a08688031215620004ac57600080fd5b8551602080880151919650906001600160401b0380821115620004ce57600080fd5b620004dc8a838b0162000415565b965060408901519150620004f082620003fc565b6060890151919550808211156200050657600080fd5b620005148a838b0162000415565b945060808901519150808211156200052b57600080fd5b508701601f810189136200053e57600080fd5b80516200054f6200043a82620003d6565b81815260059190911b8201830190838101908b8311156200056f57600080fd5b928401925b828410156200059f57835180151581146200058f5760008081fd5b8252928401929084019062000574565b80955050505050509295509295909350565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156200060a5783516001600160a01b031683529284019291840191600101620005e3565b50909695505050505050565b61304880620006266000396000f3fe6080604052600436106101e75760003560e01c80637f94f65d11610102578063ad8f2eed11610095578063d4fac45d11610064578063d4fac45d1461074c578063d6e8b97314610797578063f7d0e04b146107b7578063fb8c5ef0146107d757600080fd5b8063ad8f2eed14610692578063b0983d39146106d2578063c52164c6146106f2578063d1c070281461071f57600080fd5b80638db564c2116100d15780638db564c2146105fe5780639872dbfe1461061457806398a268711461062a5780639eee8d4b1461065a57600080fd5b80637f94f65d1461052b57806380e1d3021461054b57806384ab1d281461058b5780638da5cb5b146105d157600080fd5b80634b2ae9801161017a5780636a146024116101495780636a146024146104a25780636d82d9e0146104be57806374ba03a0146104de57806377cd38a4146104fe57600080fd5b80634b2ae9801461041c578063574983c81461043d5780635fd8c7101461045d57806369cc6af41461047257600080fd5b8063328a7181116101b6578063328a718114610295578063367821f0146102b5578063461f3120146103ae57806349ef8448146103ee57600080fd5b806304937320146101f35780630a98b9bd146102335780630d2a2d441461025357806313af40351461027557600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b5061022061020e3660046126f1565b60076020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561023f57600080fd5b5061022061024e366004612778565b6107f7565b34801561025f57600080fd5b5061027361026e36600461295f565b610ba6565b005b34801561028157600080fd5b5061027361029036600461299c565b610ce0565b3480156102a157600080fd5b506102736102b03660046129d5565b610dd1565b3480156102c157600080fd5b506103426102d03660046126f1565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007870154600888015460099098015496989597949693959473ffffffffffffffffffffffffffffffffffffffff93841694928416939182169290821691168a565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925273ffffffffffffffffffffffffffffffffffffffff90811660a087015290811660c086015290811660e0850152908116610100840152166101208201526101400161022a565b3480156103ba57600080fd5b506103de6103c93660046126f1565b60096020526000908152604090205460ff1681565b604051901515815260200161022a565b3480156103fa57600080fd5b5061040e610409366004612a48565b611012565b60405161022a929190612b43565b34801561042857600080fd5b5061022061043736600461299c565b600c1b90565b34801561044957600080fd5b506102736104583660046126f1565b6112f5565b34801561046957600080fd5b506102736113ab565b34801561047e57600080fd5b506103de61048d36600461299c565b600a6020526000908152604090205460ff1681565b3480156104ae57600080fd5b50610220670de0b6b3a764000081565b3480156104ca57600080fd5b506102736104d9366004612bd2565b61146d565b3480156104ea57600080fd5b506102736104f9366004612c07565b611584565b34801561050a57600080fd5b506102206105193660046126f1565b60066020526000908152604090205481565b34801561053757600080fd5b50610273610546366004612c6b565b611a63565b34801561055757600080fd5b506103de610566366004612c97565b600c9190911b6000908152600b60209081526040808320938352929052205460ff1c90565b34801561059757600080fd5b506105ac6105a63660046126f1565b600c1c90565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022a565b3480156105dd57600080fd5b506000546105ac9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561060a57600080fd5b5061022060045481565b34801561062057600080fd5b5061022060035481565b34801561063657600080fd5b506103de6106453660046126f1565b60086020526000908152604090205460ff1681565b34801561066657600080fd5b50610220610675366004612cd0565b600b60209081526000928352604080842090915290825290205481565b34801561069e57600080fd5b506105ac6106ad366004612c97565b600c9190911b6000908152600b602090815260408083209383529290522054605f1c90565b3480156106de57600080fd5b506102736106ed366004612cf5565b611b29565b3480156106fe57600080fd5b506002546105ac9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561072b57600080fd5b5061073f61073a366004612d2b565b611d6c565b60405161022a9190612d72565b34801561075857600080fd5b50610220610767366004612c97565b600c9190911b6000908152600b6020908152604080832093835292905220546b3fffffffffffffffffffffff1690565b3480156107a357600080fd5b506102736107b2366004612d85565b611e46565b3480156107c357600080fd5b506102736107d236600461299c565b611f56565b3480156107e357600080fd5b506102736107f2366004612e47565b612022565b600061080161211e565b61080b8383611b29565b600c8b901b6000908152600b602090815260408083208d84529091529020548a9060ff1c610865576040517fb2e532de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c8c901b6000908152600b602090815260408083208484529091529020546b3fffffffffffffffffffffff16878110156108cc576040517f22bbb43c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108d88e600c1b90565b9050600060045460016108eb9190612ed2565b6000818152600560205260409020600401549091504311610938576040517fd0404f8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052808481526020018381526020018d81526020018c81526020016003544361096c9190612ed2565b8152602001605f600b600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c73ffffffffffffffffffffffffffffffffffffffff1681526020018f73ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff16815250905089899050600014610aa957600083815260066020526040902054610a79908b908b9033612162565b610a87848c848489886121ba565b60048054906000610a9783612eea565b91905055508195505050505050610b8f565b68056bc75e2d63100000816060015111610acb57610a87848c848489886121ba565b33600c1b60009081526007602052604081205490610af9610af4670de0b6b3a764000084612f23565b612315565b9050610b0d670de0b6b3a764000082612f5e565b83606001511180610b2b575069d3c21bcecceda10000008360600151115b15610b62576040517f1c18f84600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b70868e86868b8a6121ba565b60048054906000610b8083612eea565b90915550939750505050505050505b610b9860018055565b9a9950505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b80516000905b80821015610ca4576000610c5f848481518110610c5157610c51612f9b565b6020026020010151600c1b90565b600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155929092019150610c32565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051610cd59190612fca565b60405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610c23565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b8433600c1b73ffffffffffffffffffffffffffffffffffffffff8516610e23576040517f6a3bc53e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090205460ff16610e82576040517f1578328e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020546b3fffffffffffffffffffffff81166a52b7d2dcc80cd2e4000000610ee56bffffffffffffffffffffffff8a1683612ed2565b1115610f1d576040517ff3fb0eb900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f2561211e565b8415610f3557610f353386611a63565b87878760ff81901b605f83901b610f4c8587612ed2565b6000898152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e16845290915290209117919091179055610f9d8733306bffffffffffffffffffffffff8f166123d1565b610fa660018055565b6040805173ffffffffffffffffffffffffffffffffffffffff8e1681526bffffffffffffffffffffffff8d16602082015233917f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf910160405180910390a2505050505050505050505050565b60608082516000141561103d5750506040805160008082526020820190815281830190925292909150565b8251600090818167ffffffffffffffff81111561105c5761105c612849565b604051908082528060200260200182016040528015611085578160200160208202803683370190505b50905060008267ffffffffffffffff8111156110a3576110a3612849565b6040519080825280602002602001820160405280156110cc578160200160208202803683370190505b5090505b828410156112e957600560008886815181106110ee576110ee612f9b565b6020026020010151815260200190815260200160002060000154600014156111965786848151811061112257611122612f9b565b602002602001015182858151811061113c5761113c612f9b565b602002602001018181525050600081858151811061115c5761115c612f9b565b6020026020010190600381111561117557611175612b14565b9081600381111561118857611188612b14565b9052506001909301926110d0565b600560008886815181106111ac576111ac612f9b565b60200260200101518152602001908152602001600020600301546000141561121a578684815181106111e0576111e0612f9b565b60200260200101518285815181106111fa576111fa612f9b565b602002602001018181525050600381858151811061115c5761115c612f9b565b436005600089878151811061123157611231612f9b565b6020026020010151815260200190815260200160002060040154101561129d5786848151811061126357611263612f9b565b602002602001015182858151811061127d5761127d612f9b565b602002602001018181525050600281858151811061115c5761115c612f9b565b8684815181106112af576112af612f9b565b60200260200101518285815181106112c9576112c9612f9b565b602002602001018181525050600181858151811061115c5761115c612f9b565b90969095509350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610c23565b806003557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851181604051610cd591815260200190565b60005473ffffffffffffffffffffffffffffffffffffffff16331461142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610c23565b47611437338261249b565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9101610cd5565b33600c1b6000818152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902054801561154c576000828152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816808552908352928190207f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490941660ff87901b1793849055805192835285151591830191909152849133917fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d49910160405180910390a25061157e565b6040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61158c61211e565b600086815260056020526040902060038101546115d5576040517f63b4904e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4381600401541015611613576040517ff6fafba000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005810154600382015460405160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301526034820152605481018690526000906074016040516020818303038152906040528051906020012090506000816040516020016116b691907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000858152600990935291205490915060ff1615156001141561173b576040517ff490a6ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820180845284905260ff87169282019290925260608101889052608081018790526117a39060019060a0016020604051602081039080840390855afa158015611793573d6000803e3d6000fd5b50505060206040510351600c1b90565b60008181526008602052604090205490915060ff166117ee576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60098401546003850154600286015473ffffffffffffffffffffffffffffffffffffffff909216916000906118239083613024565b6000600389018190556004890181905587815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560088801549091503373ffffffffffffffffffffffffffffffffffffffff9091161461190f57600287015433600c1b600090815260076020526040812080549091906118b5908490612ed2565b9091555050600887015482906007906000906118e79073ffffffffffffffffffffffffffffffffffffffff16600c1b90565b815260200190815260200160002060008282546119049190612ed2565b909155506119479050565b81876002015461191f9190612ed2565b33600c1b60009081526007602052604081208054909190611941908490612ed2565b90915550505b600687015461196e90849073ffffffffffffffffffffffffffffffffffffffff1683612515565b6002870154156119f457600787015473ffffffffffffffffffffffffffffffffffffffff8d81169116146119e557600787015460028801546119cd91859173ffffffffffffffffffffffffffffffffffffffff9091169060011c612515565b6119e0838d60018a60020154901c612515565b6119f4565b6119f4838d8960020154612515565b6006870154604080518f81526020810185905273ffffffffffffffffffffffffffffffffffffffff909216917f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8910160405180910390a250505050505050611a5b60018055565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216331415611af7578060066000611a9085600c1b90565b8152602080820192909252604090810160002092909255815173ffffffffffffffffffffffffffffffffffffffff851681529081018390527f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632910160405180910390a15050565b6040517f85d1f72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b80821015611d5657600060056000868686818110611b4d57611b4d612f9b565b9050602002013581526020019081526020016000209050611b6d816125d4565b80546000908152600b60209081526040808320600985015473ffffffffffffffffffffffffffffffffffffffff16845290915290205460038201546b3fffffffffffffffffffffff909116906a52b7d2dcc80cd2e400000090611bd09083612ed2565b1115611c08576040517ff3fb0eb900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600382015482546000908152600b60209081526040808320600987015473ffffffffffffffffffffffffffffffffffffffff16845290915281208054909190611c52908490612ed2565b90915550506000600383018190556008830154611c859073ffffffffffffffffffffffffffffffffffffffff16600c1b90565b60008181526007602052604090205490915060011c68056bc75e2d631000008111611cc957600082815260076020526040902068056bc75e2d631000009055611cdb565b60008281526007602052604090208190555b600684015473ffffffffffffffffffffffffffffffffffffffff167f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da5898989818110611d2957611d29612f9b565b90506020020135604051611d3f91815260200190565b60405180910390a285600101955050505050611b2d565b8082101561157e5763dfb035c96000526004601cfd5b8151606090600090818167ffffffffffffffff811115611d8e57611d8e612849565b604051908082528060200260200182016040528015611db7578160200160208202803683370190505b5090505b81831015611e3d576000611e10878581518110611dda57611dda612f9b565b602090810291909101810151600c1b6000908152600b825260408082208a835290925220546b3fffffffffffffffffffffff1690565b905080828581518110611e2557611e25612f9b565b60200260200101818152505083600101935050611dbb565b95945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611ec7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610c23565b815180611edc5763df9578836000526004601cfd5b81518114611ef25763ff633a386000526004601cfd5b60208301602083018260051b82015b808314611a5b578251600052600a60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a3602083019250602082019150611f01565b60005473ffffffffffffffffffffffffffffffffffffffff163314611fd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610c23565b600281905560405173ffffffffffffffffffffffffffffffffffffffff821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f90602001610cd5565b61202a61211e565b6120348282611b29565b33600c1b6000908152600b6020908152604080832087845290915290205460ff1c15156001141561206a5761206a84600061146d565b33600c1b6000818152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091529020546120b8906b3fffffffffffffffffffffff16858784612650565b6120c3853386612515565b6040805173ffffffffffffffffffffffffffffffffffffffff871681526020810186905233917f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e910160405180910390a25061157e60018055565b6001546002141561215b576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b61218484848473ffffffffffffffffffffffffffffffffffffffff85166126ad565b61157e576040517f3b8474be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526005602081815260409283902086518155908601516001820155918501516002830155606085015160038301556080850151600483015560a085015190820180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560c0860151600684018054831691841691909117905560e08601516007840180548316918416919091179055610100860151600884018054831691841691909117905561012086015160099093018054909116929091169190911790556122a986868484612650565b60c083015183516060850151604051879373ffffffffffffffffffffffffffffffffffffffff16927f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea659261230592918252602082015260400190565b60405180910390a3505050505050565b600080634d2b179160e01b8360405160240161233391815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600080600060206000855160208701600254617530fa92503d91506000519050809450826123c85763e10bf1cc6000526004601cfd5b50505050919050565b60006040517f23b872dd000000000000000000000000000000000000000000000000000000006000528460045283602452826044526020600060646000808a5af13d15601f3d1160016000511416171691506000606052806040525080612494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610c23565b5050505050565b600080600080600085875af1905080612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610c23565b505050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000006000528360045282602452602060006044600080895af13d15601f3d116001600051141617169150600060605280604052508061157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610c23565b4381600401541115612612576040517fd0404f8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600381015461264d576040517f63b4904e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b836126635763ce3a3d376000526004601cfd5b6000818152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548592906126a2908490613024565b909155505050505050565b600083156126e9578360051b8501855b803580851160051b948552602094851852604060002093018181106126e1576126e6565b6126bd565b50505b501492915050565b60006020828403121561270357600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461264d57600080fd5b60008083601f84011261273e57600080fd5b50813567ffffffffffffffff81111561275657600080fd5b6020830191508360208260051b850101111561277157600080fd5b9250929050565b6000806000806000806000806000806101008b8d03121561279857600080fd5b8a356127a38161270a565b995060208b01356127b38161270a565b985060408b01356127c38161270a565b975060608b01356127d38161270a565b965060808b0135955060a08b0135945060c08b013567ffffffffffffffff808211156127fe57600080fd5b61280a8e838f0161272c565b909650945060e08d013591508082111561282357600080fd5b506128308d828e0161272c565b915080935050809150509295989b9194979a5092959850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156128bf576128bf612849565b604052919050565b600067ffffffffffffffff8211156128e1576128e1612849565b5060051b60200190565b600082601f8301126128fc57600080fd5b8135602061291161290c836128c7565b612878565b82815260059290921b8401810191818101908684111561293057600080fd5b8286015b848110156129545780356129478161270a565b8352918301918301612934565b509695505050505050565b60006020828403121561297157600080fd5b813567ffffffffffffffff81111561298857600080fd5b612994848285016128eb565b949350505050565b6000602082840312156129ae57600080fd5b81356129b98161270a565b9392505050565b803580151581146129d057600080fd5b919050565b600080600080600060a086880312156129ed57600080fd5b85356129f88161270a565b945060208601356bffffffffffffffffffffffff81168114612a1957600080fd5b93506040860135612a298161270a565b9250612a37606087016129c0565b949793965091946080013592915050565b60006020808385031215612a5b57600080fd5b823567ffffffffffffffff811115612a7257600080fd5b8301601f81018513612a8357600080fd5b8035612a9161290c826128c7565b81815260059190911b82018301908381019087831115612ab057600080fd5b928401925b82841015612ace57833582529284019290840190612ab5565b979650505050505050565b600081518084526020808501945080840160005b83811015612b0957815187529582019590820190600101612aed565b509495945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b604081526000612b566040830185612ad9565b8281036020848101919091528451808352858201928201906000805b82811015612bc45785516004808210612bb1577f4e487b7100000000000000000000000000000000000000000000000000000000845260218152602484fd5b5084529484019492840192600101612b72565b509198975050505050505050565b60008060408385031215612be557600080fd5b8235612bf08161270a565b9150612bfe602084016129c0565b90509250929050565b60008060008060008060c08789031215612c2057600080fd5b863595506020870135612c328161270a565b945060408701359350606087013592506080870135915060a087013560ff81168114612c5d57600080fd5b809150509295509295509295565b60008060408385031215612c7e57600080fd5b8235612c898161270a565b946020939093013593505050565b60008060408385031215612caa57600080fd5b8235612cb58161270a565b91506020830135612cc58161270a565b809150509250929050565b60008060408385031215612ce357600080fd5b823591506020830135612cc58161270a565b60008060208385031215612d0857600080fd5b823567ffffffffffffffff811115612d1f57600080fd5b6112e98582860161272c565b60008060408385031215612d3e57600080fd5b823567ffffffffffffffff811115612d5557600080fd5b612d61858286016128eb565b9250506020830135612cc58161270a565b6020815260006129b96020830184612ad9565b60008060408385031215612d9857600080fd5b823567ffffffffffffffff80821115612db057600080fd5b612dbc868387016128eb565b9350602091508185013581811115612dd357600080fd5b85019050601f81018613612de657600080fd5b8035612df461290c826128c7565b81815260059190911b82018301908381019088831115612e1357600080fd5b928401925b82841015612e3857612e29846129c0565b82529284019290840190612e18565b80955050505050509250929050565b60008060008060608587031215612e5d57600080fd5b8435612e688161270a565b935060208501359250604085013567ffffffffffffffff811115612e8b57600080fd5b612e978782880161272c565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612ee557612ee5612ea3565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f1c57612f1c612ea3565b5060010190565b600082612f59577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f9657612f96612ea3565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101561301857835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612fe6565b50909695505050505050565b60008282101561303657613036612ea3565b50039056fea164736f6c6343000809000a",
+ "deployedBytecode": "0x6080604052600436106101e75760003560e01c80637f94f65d11610102578063ad8f2eed11610095578063d4fac45d11610064578063d4fac45d1461074c578063d6e8b97314610797578063f7d0e04b146107b7578063fb8c5ef0146107d757600080fd5b8063ad8f2eed14610692578063b0983d39146106d2578063c52164c6146106f2578063d1c070281461071f57600080fd5b80638db564c2116100d15780638db564c2146105fe5780639872dbfe1461061457806398a268711461062a5780639eee8d4b1461065a57600080fd5b80637f94f65d1461052b57806380e1d3021461054b57806384ab1d281461058b5780638da5cb5b146105d157600080fd5b80634b2ae9801161017a5780636a146024116101495780636a146024146104a25780636d82d9e0146104be57806374ba03a0146104de57806377cd38a4146104fe57600080fd5b80634b2ae9801461041c578063574983c81461043d5780635fd8c7101461045d57806369cc6af41461047257600080fd5b8063328a7181116101b6578063328a718114610295578063367821f0146102b5578063461f3120146103ae57806349ef8448146103ee57600080fd5b806304937320146101f35780630a98b9bd146102335780630d2a2d441461025357806313af40351461027557600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b5061022061020e3660046126f1565b60076020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561023f57600080fd5b5061022061024e366004612778565b6107f7565b34801561025f57600080fd5b5061027361026e36600461295f565b610ba6565b005b34801561028157600080fd5b5061027361029036600461299c565b610ce0565b3480156102a157600080fd5b506102736102b03660046129d5565b610dd1565b3480156102c157600080fd5b506103426102d03660046126f1565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007870154600888015460099098015496989597949693959473ffffffffffffffffffffffffffffffffffffffff93841694928416939182169290821691168a565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925273ffffffffffffffffffffffffffffffffffffffff90811660a087015290811660c086015290811660e0850152908116610100840152166101208201526101400161022a565b3480156103ba57600080fd5b506103de6103c93660046126f1565b60096020526000908152604090205460ff1681565b604051901515815260200161022a565b3480156103fa57600080fd5b5061040e610409366004612a48565b611012565b60405161022a929190612b43565b34801561042857600080fd5b5061022061043736600461299c565b600c1b90565b34801561044957600080fd5b506102736104583660046126f1565b6112f5565b34801561046957600080fd5b506102736113ab565b34801561047e57600080fd5b506103de61048d36600461299c565b600a6020526000908152604090205460ff1681565b3480156104ae57600080fd5b50610220670de0b6b3a764000081565b3480156104ca57600080fd5b506102736104d9366004612bd2565b61146d565b3480156104ea57600080fd5b506102736104f9366004612c07565b611584565b34801561050a57600080fd5b506102206105193660046126f1565b60066020526000908152604090205481565b34801561053757600080fd5b50610273610546366004612c6b565b611a63565b34801561055757600080fd5b506103de610566366004612c97565b600c9190911b6000908152600b60209081526040808320938352929052205460ff1c90565b34801561059757600080fd5b506105ac6105a63660046126f1565b600c1c90565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022a565b3480156105dd57600080fd5b506000546105ac9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561060a57600080fd5b5061022060045481565b34801561062057600080fd5b5061022060035481565b34801561063657600080fd5b506103de6106453660046126f1565b60086020526000908152604090205460ff1681565b34801561066657600080fd5b50610220610675366004612cd0565b600b60209081526000928352604080842090915290825290205481565b34801561069e57600080fd5b506105ac6106ad366004612c97565b600c9190911b6000908152600b602090815260408083209383529290522054605f1c90565b3480156106de57600080fd5b506102736106ed366004612cf5565b611b29565b3480156106fe57600080fd5b506002546105ac9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561072b57600080fd5b5061073f61073a366004612d2b565b611d6c565b60405161022a9190612d72565b34801561075857600080fd5b50610220610767366004612c97565b600c9190911b6000908152600b6020908152604080832093835292905220546b3fffffffffffffffffffffff1690565b3480156107a357600080fd5b506102736107b2366004612d85565b611e46565b3480156107c357600080fd5b506102736107d236600461299c565b611f56565b3480156107e357600080fd5b506102736107f2366004612e47565b612022565b600061080161211e565b61080b8383611b29565b600c8b901b6000908152600b602090815260408083208d84529091529020548a9060ff1c610865576040517fb2e532de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c8c901b6000908152600b602090815260408083208484529091529020546b3fffffffffffffffffffffff16878110156108cc576040517f22bbb43c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108d88e600c1b90565b9050600060045460016108eb9190612ed2565b6000818152600560205260409020600401549091504311610938576040517fd0404f8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052808481526020018381526020018d81526020018c81526020016003544361096c9190612ed2565b8152602001605f600b600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c73ffffffffffffffffffffffffffffffffffffffff1681526020018f73ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff16815250905089899050600014610aa957600083815260066020526040902054610a79908b908b9033612162565b610a87848c848489886121ba565b60048054906000610a9783612eea565b91905055508195505050505050610b8f565b68056bc75e2d63100000816060015111610acb57610a87848c848489886121ba565b33600c1b60009081526007602052604081205490610af9610af4670de0b6b3a764000084612f23565b612315565b9050610b0d670de0b6b3a764000082612f5e565b83606001511180610b2b575069d3c21bcecceda10000008360600151115b15610b62576040517f1c18f84600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b70868e86868b8a6121ba565b60048054906000610b8083612eea565b90915550939750505050505050505b610b9860018055565b9a9950505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b80516000905b80821015610ca4576000610c5f848481518110610c5157610c51612f9b565b6020026020010151600c1b90565b600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155929092019150610c32565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051610cd59190612fca565b60405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610c23565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b8433600c1b73ffffffffffffffffffffffffffffffffffffffff8516610e23576040517f6a3bc53e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090205460ff16610e82576040517f1578328e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020546b3fffffffffffffffffffffff81166a52b7d2dcc80cd2e4000000610ee56bffffffffffffffffffffffff8a1683612ed2565b1115610f1d576040517ff3fb0eb900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f2561211e565b8415610f3557610f353386611a63565b87878760ff81901b605f83901b610f4c8587612ed2565b6000898152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e16845290915290209117919091179055610f9d8733306bffffffffffffffffffffffff8f166123d1565b610fa660018055565b6040805173ffffffffffffffffffffffffffffffffffffffff8e1681526bffffffffffffffffffffffff8d16602082015233917f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf910160405180910390a2505050505050505050505050565b60608082516000141561103d5750506040805160008082526020820190815281830190925292909150565b8251600090818167ffffffffffffffff81111561105c5761105c612849565b604051908082528060200260200182016040528015611085578160200160208202803683370190505b50905060008267ffffffffffffffff8111156110a3576110a3612849565b6040519080825280602002602001820160405280156110cc578160200160208202803683370190505b5090505b828410156112e957600560008886815181106110ee576110ee612f9b565b6020026020010151815260200190815260200160002060000154600014156111965786848151811061112257611122612f9b565b602002602001015182858151811061113c5761113c612f9b565b602002602001018181525050600081858151811061115c5761115c612f9b565b6020026020010190600381111561117557611175612b14565b9081600381111561118857611188612b14565b9052506001909301926110d0565b600560008886815181106111ac576111ac612f9b565b60200260200101518152602001908152602001600020600301546000141561121a578684815181106111e0576111e0612f9b565b60200260200101518285815181106111fa576111fa612f9b565b602002602001018181525050600381858151811061115c5761115c612f9b565b436005600089878151811061123157611231612f9b565b6020026020010151815260200190815260200160002060040154101561129d5786848151811061126357611263612f9b565b602002602001015182858151811061127d5761127d612f9b565b602002602001018181525050600281858151811061115c5761115c612f9b565b8684815181106112af576112af612f9b565b60200260200101518285815181106112c9576112c9612f9b565b602002602001018181525050600181858151811061115c5761115c612f9b565b90969095509350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610c23565b806003557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851181604051610cd591815260200190565b60005473ffffffffffffffffffffffffffffffffffffffff16331461142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610c23565b47611437338261249b565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9101610cd5565b33600c1b6000818152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902054801561154c576000828152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816808552908352928190207f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490941660ff87901b1793849055805192835285151591830191909152849133917fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d49910160405180910390a25061157e565b6040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61158c61211e565b600086815260056020526040902060038101546115d5576040517f63b4904e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4381600401541015611613576040517ff6fafba000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005810154600382015460405160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301526034820152605481018690526000906074016040516020818303038152906040528051906020012090506000816040516020016116b691907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000858152600990935291205490915060ff1615156001141561173b576040517ff490a6ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820180845284905260ff87169282019290925260608101889052608081018790526117a39060019060a0016020604051602081039080840390855afa158015611793573d6000803e3d6000fd5b50505060206040510351600c1b90565b60008181526008602052604090205490915060ff166117ee576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60098401546003850154600286015473ffffffffffffffffffffffffffffffffffffffff909216916000906118239083613024565b6000600389018190556004890181905587815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560088801549091503373ffffffffffffffffffffffffffffffffffffffff9091161461190f57600287015433600c1b600090815260076020526040812080549091906118b5908490612ed2565b9091555050600887015482906007906000906118e79073ffffffffffffffffffffffffffffffffffffffff16600c1b90565b815260200190815260200160002060008282546119049190612ed2565b909155506119479050565b81876002015461191f9190612ed2565b33600c1b60009081526007602052604081208054909190611941908490612ed2565b90915550505b600687015461196e90849073ffffffffffffffffffffffffffffffffffffffff1683612515565b6002870154156119f457600787015473ffffffffffffffffffffffffffffffffffffffff8d81169116146119e557600787015460028801546119cd91859173ffffffffffffffffffffffffffffffffffffffff9091169060011c612515565b6119e0838d60018a60020154901c612515565b6119f4565b6119f4838d8960020154612515565b6006870154604080518f81526020810185905273ffffffffffffffffffffffffffffffffffffffff909216917f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8910160405180910390a250505050505050611a5b60018055565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216331415611af7578060066000611a9085600c1b90565b8152602080820192909252604090810160002092909255815173ffffffffffffffffffffffffffffffffffffffff851681529081018390527f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632910160405180910390a15050565b6040517f85d1f72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b80821015611d5657600060056000868686818110611b4d57611b4d612f9b565b9050602002013581526020019081526020016000209050611b6d816125d4565b80546000908152600b60209081526040808320600985015473ffffffffffffffffffffffffffffffffffffffff16845290915290205460038201546b3fffffffffffffffffffffff909116906a52b7d2dcc80cd2e400000090611bd09083612ed2565b1115611c08576040517ff3fb0eb900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600382015482546000908152600b60209081526040808320600987015473ffffffffffffffffffffffffffffffffffffffff16845290915281208054909190611c52908490612ed2565b90915550506000600383018190556008830154611c859073ffffffffffffffffffffffffffffffffffffffff16600c1b90565b60008181526007602052604090205490915060011c68056bc75e2d631000008111611cc957600082815260076020526040902068056bc75e2d631000009055611cdb565b60008281526007602052604090208190555b600684015473ffffffffffffffffffffffffffffffffffffffff167f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da5898989818110611d2957611d29612f9b565b90506020020135604051611d3f91815260200190565b60405180910390a285600101955050505050611b2d565b8082101561157e5763dfb035c96000526004601cfd5b8151606090600090818167ffffffffffffffff811115611d8e57611d8e612849565b604051908082528060200260200182016040528015611db7578160200160208202803683370190505b5090505b81831015611e3d576000611e10878581518110611dda57611dda612f9b565b602090810291909101810151600c1b6000908152600b825260408082208a835290925220546b3fffffffffffffffffffffff1690565b905080828581518110611e2557611e25612f9b565b60200260200101818152505083600101935050611dbb565b95945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611ec7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610c23565b815180611edc5763df9578836000526004601cfd5b81518114611ef25763ff633a386000526004601cfd5b60208301602083018260051b82015b808314611a5b578251600052600a60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a3602083019250602082019150611f01565b60005473ffffffffffffffffffffffffffffffffffffffff163314611fd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610c23565b600281905560405173ffffffffffffffffffffffffffffffffffffffff821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f90602001610cd5565b61202a61211e565b6120348282611b29565b33600c1b6000908152600b6020908152604080832087845290915290205460ff1c15156001141561206a5761206a84600061146d565b33600c1b6000818152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091529020546120b8906b3fffffffffffffffffffffff16858784612650565b6120c3853386612515565b6040805173ffffffffffffffffffffffffffffffffffffffff871681526020810186905233917f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e910160405180910390a25061157e60018055565b6001546002141561215b576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b61218484848473ffffffffffffffffffffffffffffffffffffffff85166126ad565b61157e576040517f3b8474be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526005602081815260409283902086518155908601516001820155918501516002830155606085015160038301556080850151600483015560a085015190820180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560c0860151600684018054831691841691909117905560e08601516007840180548316918416919091179055610100860151600884018054831691841691909117905561012086015160099093018054909116929091169190911790556122a986868484612650565b60c083015183516060850151604051879373ffffffffffffffffffffffffffffffffffffffff16927f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea659261230592918252602082015260400190565b60405180910390a3505050505050565b600080634d2b179160e01b8360405160240161233391815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600080600060206000855160208701600254617530fa92503d91506000519050809450826123c85763e10bf1cc6000526004601cfd5b50505050919050565b60006040517f23b872dd000000000000000000000000000000000000000000000000000000006000528460045283602452826044526020600060646000808a5af13d15601f3d1160016000511416171691506000606052806040525080612494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610c23565b5050505050565b600080600080600085875af1905080612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610c23565b505050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000006000528360045282602452602060006044600080895af13d15601f3d116001600051141617169150600060605280604052508061157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610c23565b4381600401541115612612576040517fd0404f8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600381015461264d576040517f63b4904e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b836126635763ce3a3d376000526004601cfd5b6000818152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548592906126a2908490613024565b909155505050505050565b600083156126e9578360051b8501855b803580851160051b948552602094851852604060002093018181106126e1576126e6565b6126bd565b50505b501492915050565b60006020828403121561270357600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461264d57600080fd5b60008083601f84011261273e57600080fd5b50813567ffffffffffffffff81111561275657600080fd5b6020830191508360208260051b850101111561277157600080fd5b9250929050565b6000806000806000806000806000806101008b8d03121561279857600080fd5b8a356127a38161270a565b995060208b01356127b38161270a565b985060408b01356127c38161270a565b975060608b01356127d38161270a565b965060808b0135955060a08b0135945060c08b013567ffffffffffffffff808211156127fe57600080fd5b61280a8e838f0161272c565b909650945060e08d013591508082111561282357600080fd5b506128308d828e0161272c565b915080935050809150509295989b9194979a5092959850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156128bf576128bf612849565b604052919050565b600067ffffffffffffffff8211156128e1576128e1612849565b5060051b60200190565b600082601f8301126128fc57600080fd5b8135602061291161290c836128c7565b612878565b82815260059290921b8401810191818101908684111561293057600080fd5b8286015b848110156129545780356129478161270a565b8352918301918301612934565b509695505050505050565b60006020828403121561297157600080fd5b813567ffffffffffffffff81111561298857600080fd5b612994848285016128eb565b949350505050565b6000602082840312156129ae57600080fd5b81356129b98161270a565b9392505050565b803580151581146129d057600080fd5b919050565b600080600080600060a086880312156129ed57600080fd5b85356129f88161270a565b945060208601356bffffffffffffffffffffffff81168114612a1957600080fd5b93506040860135612a298161270a565b9250612a37606087016129c0565b949793965091946080013592915050565b60006020808385031215612a5b57600080fd5b823567ffffffffffffffff811115612a7257600080fd5b8301601f81018513612a8357600080fd5b8035612a9161290c826128c7565b81815260059190911b82018301908381019087831115612ab057600080fd5b928401925b82841015612ace57833582529284019290840190612ab5565b979650505050505050565b600081518084526020808501945080840160005b83811015612b0957815187529582019590820190600101612aed565b509495945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b604081526000612b566040830185612ad9565b8281036020848101919091528451808352858201928201906000805b82811015612bc45785516004808210612bb1577f4e487b7100000000000000000000000000000000000000000000000000000000845260218152602484fd5b5084529484019492840192600101612b72565b509198975050505050505050565b60008060408385031215612be557600080fd5b8235612bf08161270a565b9150612bfe602084016129c0565b90509250929050565b60008060008060008060c08789031215612c2057600080fd5b863595506020870135612c328161270a565b945060408701359350606087013592506080870135915060a087013560ff81168114612c5d57600080fd5b809150509295509295509295565b60008060408385031215612c7e57600080fd5b8235612c898161270a565b946020939093013593505050565b60008060408385031215612caa57600080fd5b8235612cb58161270a565b91506020830135612cc58161270a565b809150509250929050565b60008060408385031215612ce357600080fd5b823591506020830135612cc58161270a565b60008060208385031215612d0857600080fd5b823567ffffffffffffffff811115612d1f57600080fd5b6112e98582860161272c565b60008060408385031215612d3e57600080fd5b823567ffffffffffffffff811115612d5557600080fd5b612d61858286016128eb565b9250506020830135612cc58161270a565b6020815260006129b96020830184612ad9565b60008060408385031215612d9857600080fd5b823567ffffffffffffffff80821115612db057600080fd5b612dbc868387016128eb565b9350602091508185013581811115612dd357600080fd5b85019050601f81018613612de657600080fd5b8035612df461290c826128c7565b81815260059190911b82018301908381019088831115612e1357600080fd5b928401925b82841015612e3857612e29846129c0565b82529284019290840190612e18565b80955050505050509250929050565b60008060008060608587031215612e5d57600080fd5b8435612e688161270a565b935060208501359250604085013567ffffffffffffffff811115612e8b57600080fd5b612e978782880161272c565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612ee557612ee5612ea3565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f1c57612f1c612ea3565b5060010190565b600082612f59577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f9657612f96612ea3565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101561301857835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612fe6565b50909695505050505050565b60008282101561303657613036612ea3565b50039056fea164736f6c6343000809000a",
"linkReferences": {},
"deployedLinkReferences": {}
}
diff --git a/src/utils/smart_contract_files/goerli.json b/src/utils/smart_contract_files/goerli.json
deleted file mode 100644
index 53cafaa..0000000
--- a/src/utils/smart_contract_files/goerli.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "signers": [
- "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
- "0x70997970C51812dc3A010C7d01b50e0d17dc79C8"
- ],
- "p2pix": "0x5f3EFA9A90532914545CEf527C530658af87e196",
- "token": "0x294003F602c321627152c6b7DED3EAb5bEa853Ee"
-}
\ No newline at end of file
diff --git a/src/utils/smart_contract_files/localhost.json b/src/utils/smart_contract_files/localhost.json
deleted file mode 100644
index d334d4a..0000000
--- a/src/utils/smart_contract_files/localhost.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "signers": [
- "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
- "0x70997970C51812dc3A010C7d01b50e0d17dc79C8"
- ],
- "p2pix": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0",
- "token": "0x5FbDB2315678afecb367f032d93F642f64180aa3"
-}
\ No newline at end of file
diff --git a/src/utils/smart_contract_files/polygon-mumbai.json b/src/utils/smart_contract_files/polygon-mumbai.json
deleted file mode 100644
index 53cafaa..0000000
--- a/src/utils/smart_contract_files/polygon-mumbai.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "signers": [
- "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
- "0x70997970C51812dc3A010C7d01b50e0d17dc79C8"
- ],
- "p2pix": "0x5f3EFA9A90532914545CEf527C530658af87e196",
- "token": "0x294003F602c321627152c6b7DED3EAb5bEa853Ee"
-}
\ No newline at end of file
diff --git a/src/utils/smart_contract_files/wallets.json b/src/utils/smart_contract_files/wallets.json
deleted file mode 100644
index 5d6729c..0000000
--- a/src/utils/smart_contract_files/wallets.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "wallets":[
- "0x70997970C51812dc3A010C7d01b50e0d17dc79C8",
- "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC"
- ]
-}
\ No newline at end of file
diff --git a/src/views/FaqView.vue b/src/views/FaqView.vue
index ecbbebe..7624e09 100644
--- a/src/views/FaqView.vue
+++ b/src/views/FaqView.vue
@@ -2,69 +2,9 @@
import type { Faq } from "@/model/Faq";
import { ref } from "vue";
import { marked } from "marked";
+import faqContent from "@/utils/files/faqContent.json";
-const faq = ref([
- {
- name: "1. Como Começar",
- items: [
- {
- title: "O que é uma carteira (wallet)",
- content:
- "# Lorem ipsum dolor sit **amet** consectetur. Neque libero magna mi purus. Aliquam vitae feugiat quis sapien. Pharetra gravida nisi donec bibendum mauris aliquam molestie. Et nunc placerat in ac integer maecenas arcu. Lotuam tincidunt morbi ac sed fames habitasse velit et nunc.",
- },
- {
- title: "O que é uma carteira (wallet)",
- content:
- "Lorem ipsum dolor sit amet consectetur. Neque libero magna mi purus. Aliquam vitae feugiat quis sapien. Pharetra gravida nisi donec bibendum mauris aliquam molestie. Et nunc placerat in ac integer maecenas arcu. Lotuam tincidunt morbi ac sed fames habitasse velit et nunc.",
- },
- {
- title: "O que é uma carteira (wallet)",
- content:
- "Lorem ipsum dolor sit amet consectetur. Neque libero magna mi purus. Aliquam vitae feugiat quis sapien. Pharetra gravida nisi donec bibendum mauris aliquam molestie. Et nunc placerat in ac integer maecenas arcu. Lotuam tincidunt morbi ac sed fames habitasse velit et nunc.",
- },
- ],
- },
- {
- name: "2. Comprar tokens",
- items: [
- {
- title: "O que é um endereço de carteira (wallet address)",
- content:
- "Lorem ipsum dolor sit amet consectetur. Neque libero magna mi purus. Aliquam vitae feugiat quis sapien. Pharetra gravida nisi donec bibendum mauris aliquam molestie. Et nunc placerat in ac integer maecenas arcu. Lotuam tincidunt morbi ac sed fames habitasse velit et nunc.",
- },
- {
- title: "O que é um endereço de carteira (wallet address)",
- content:
- "Lorem ipsum dolor sit amet consectetur. Neque libero magna mi purus. Aliquam vitae feugiat quis sapien. Pharetra gravida nisi donec bibendum mauris aliquam molestie. Et nunc placerat in ac integer maecenas arcu. Lotuam tincidunt morbi ac sed fames habitasse velit et nunc.",
- },
- {
- title: "O que é um endereço de carteira (wallet address)",
- content:
- "Lorem ipsum dolor sit amet consectetur. Neque libero magna mi purus. Aliquam vitae feugiat quis sapien. Pharetra gravida nisi donec bibendum mauris aliquam molestie. Et nunc placerat in ac integer maecenas arcu. Lotuam tincidunt morbi ac sed fames habitasse velit et nunc.",
- },
- ],
- },
- {
- name: "3. Vender tokens",
- items: [
- {
- title: "Como conectar a carteira ao p2pix",
- content:
- "Lorem ipsum dolor sit amet consectetur. Neque libero magna mi purus. Aliquam vitae feugiat quis sapien. Pharetra gravida nisi donec bibendum mauris aliquam molestie. Et nunc placerat in ac integer maecenas arcu. Lotuam tincidunt morbi ac sed fames habitasse velit et nunc.",
- },
- {
- title: "Como conectar a carteira ao p2pix",
- content:
- "Lorem ipsum dolor sit amet consectetur. Neque libero magna mi purus. Aliquam vitae feugiat quis sapien. Pharetra gravida nisi donec bibendum mauris aliquam molestie. Et nunc placerat in ac integer maecenas arcu. Lotuam tincidunt morbi ac sed fames habitasse velit et nunc.",
- },
- {
- title: "Como conectar a carteira ao p2pix",
- content:
- "Lorem ipsum dolor sit amet consectetur. Neque libero magna mi purus. Aliquam vitae feugiat quis sapien. Pharetra gravida nisi donec bibendum mauris aliquam molestie. Et nunc placerat in ac integer maecenas arcu. Lotuam tincidunt morbi ac sed fames habitasse velit et nunc.",
- },
- ],
- },
-]);
+const faq = ref(faqContent);
const selectedSection = ref(0);
@@ -76,9 +16,15 @@ const openItem = (index: number) => {
faq.value[selectedSection.value].items[index].isOpen =
!faq.value[selectedSection.value].items[index].isOpen;
+ marked.setOptions({
+ breaks: true,
+ gfm: true,
+ });
+
faq.value[selectedSection.value].items[index].content = marked(
faq.value[selectedSection.value].items[index].content
);
+ console.log(marked(faq.value[selectedSection.value].items[index].content));
};
@@ -96,7 +42,7 @@ const openItem = (index: number) => {
-
Sumário
+ Sumário
{
class="mr-3"
v-if="item.isOpen"
/>
- {{ item.title }}
+ {{ item.title }}
-
+
@@ -154,17 +96,30 @@ const openItem = (index: number) => {
@apply flex flex-col items-center justify-center w-full mt-16;
}
+div.content {
+ padding-top: 24px;
+ color: white;
+}
+
+.content :deep(ul) {
+ @apply list-disc m-2 p-3;
+}
+
+.content :deep(ol) {
+ @apply list-decimal m-2 p-3;
+}
+
+.content :deep(ol ul) {
+ @apply list-disc m-1 p-1;
+}
+
.hr {
border: 1px solid #1f2937;
margin: 24px 0;
}
-p,
-h2,
-h3,
-h4 {
- @apply text-gray-800 text-xl;
- color: #1f2937;
+h3 {
+ @apply text-white;
}
h2,
@@ -177,7 +132,7 @@ h4 {
}
.text {
- @apply text-gray-800 text-center;
+ @apply text-white text-center;
}
.blur-container-row {
@apply flex flex-row justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-8 w-1/3;
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
index 128f733..4e4fbc2 100644
--- a/src/views/HomeView.vue
+++ b/src/views/HomeView.vue
@@ -1,19 +1,17 @@
@@ -94,26 +123,40 @@ onMounted(async () => {
v-if="flowStep == Step.Search"
@token-buy="confirmBuyClick"
/>
+
+
-
-
-
+
+
+
diff --git a/src/views/ManageBidsView.vue b/src/views/ManageBidsView.vue
index c24c5d9..73253fd 100644
--- a/src/views/ManageBidsView.vue
+++ b/src/views/ManageBidsView.vue
@@ -2,75 +2,115 @@
import { useEtherStore } from "@/store/ether";
import { storeToRefs } from "pinia";
import ListingComponent from "@/components/ListingComponent/ListingComponent.vue";
-import type { BigNumber } from "ethers";
+import LoadingComponent from "@/components/LoadingComponent/LoadingComponent.vue";
+import CustomAlert from "@/components/CustomAlert/CustomAlert.vue";
import { ref, watch, onMounted } from "vue";
-import { cancelDeposit, withdrawDeposit } from "@/blockchain/buyerMethods";
-import { listValidDepositTransactionsByWalletAddress } from "@/blockchain/wallet";
+import {
+ listValidDepositTransactionsByWalletAddress,
+ listAllTransactionByWalletAddress,
+ getActiveLockAmount,
+} from "@/blockchain/wallet";
+import { withdrawDeposit } from "@/blockchain/buyerMethods";
import type { ValidDeposit } from "@/model/ValidDeposit";
+import type { WalletTransaction } from "@/model/WalletTransaction";
+
+import router from "@/router/index";
const etherStore = useEtherStore();
const { walletAddress, networkName } = storeToRefs(etherStore);
-const depositList = ref
([]);
+const loadingWithdraw = ref(false);
+const showAlert = ref(false);
-onMounted(async () => {
+const depositList = ref([]);
+const transactionsList = ref([]);
+const activeLockAmount = ref(0);
+
+const callWithdraw = async (amount: string) => {
+ if (amount) {
+ loadingWithdraw.value = true;
+ let withdraw;
+ try {
+ withdraw = await withdrawDeposit(amount);
+ } catch {
+ loadingWithdraw.value = false;
+ }
+
+ if (withdraw) {
+ console.log("Saque realizado!");
+ await getWalletTransactions();
+ showAlert.value = true;
+ } else {
+ console.log("Não foi possível realizar o saque!");
+ }
+ loadingWithdraw.value = false;
+ }
+};
+
+const getWalletTransactions = async () => {
+ etherStore.setLoadingWalletTransactions(true);
if (walletAddress.value) {
const walletDeposits = await listValidDepositTransactionsByWalletAddress(
walletAddress.value
);
+
+ const allUserTransactions = await listAllTransactionByWalletAddress(
+ walletAddress.value
+ );
+
+ activeLockAmount.value = await getActiveLockAmount(walletAddress.value);
+
if (walletDeposits) {
depositList.value = walletDeposits;
}
+ if (allUserTransactions) {
+ transactionsList.value = allUserTransactions;
+ }
}
+ etherStore.setLoadingWalletTransactions(false);
+};
+
+onMounted(async () => {
+ if (!walletAddress.value) {
+ router.push({ name: "home" });
+ }
+ await getWalletTransactions();
});
-const handleCancelDeposit = async (depositID: BigNumber, index: number) => {
- const response = await cancelDeposit(depositID);
- if (response) {
- console.log("Depósito cancelado com sucesso.");
- depositList.value.splice(index, 1);
- }
-};
-
-const handleWithDrawDeposit = async (depositID: BigNumber, index: number) => {
- const response = await withdrawDeposit(depositID);
- if (response) {
- console.log("Token retirado com sucesso.");
- depositList.value.splice(index, 1);
- }
-};
-
watch(walletAddress, async () => {
- await listValidDepositTransactionsByWalletAddress(walletAddress.value)
- .then((res) => {
- if (res) depositList.value = res;
- })
- .catch(() => {
- depositList.value = [];
- });
+ await getWalletTransactions();
});
watch(networkName, async () => {
- await listValidDepositTransactionsByWalletAddress(walletAddress.value)
- .then((res) => {
- if (res) depositList.value = res;
- })
- .catch(() => {
- depositList.value = [];
- });
+ await getWalletTransactions();
});
+
@@ -81,6 +121,6 @@ watch(networkName, async () => {
}
.header {
- @apply text-3xl text-gray-900 leading-9 font-bold justify-center flex;
+ @apply text-3xl text-white leading-9 font-bold justify-center flex;
}
diff --git a/src/views/SellerView.vue b/src/views/SellerView.vue
index 3efa67f..76c6242 100644
--- a/src/views/SellerView.vue
+++ b/src/views/SellerView.vue
@@ -1,11 +1,12 @@
-
-
-
-
-
-
diff --git a/vite.config.ts b/vite.config.ts
index 1a35c64..4ac95f3 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -13,6 +13,7 @@ export default defineConfig({
provider: "c8",
all: true,
src: ["./src"],
+ exclude: ["model/**", "**/__tests__/**"],
reporter: ["text", "lcov", "html"],
},
},
diff --git a/yarn.lock b/yarn.lock
index 1cfa6f5..3362cf7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1320,6 +1320,26 @@
"@ethersproject/properties" "^5.7.0"
"@ethersproject/strings" "^5.7.0"
+"@floating-ui/core@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.2.1.tgz#074182a1d277f94569c50a6b456e62585d463c8e"
+ integrity sha512-LSqwPZkK3rYfD7GKoIeExXOyYx6Q1O4iqZWwIehDNuv3Dv425FIAE8PRwtAx1imEolFTHgBEcoFHm9MDnYgPCg==
+
+"@floating-ui/dom@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.2.1.tgz#8f93906e1a3b9f606ce78afb058e874344dcbe07"
+ integrity sha512-Rt45SmRiV8eU+xXSB9t0uMYiQ/ZWGE/jumse2o3i5RGlyvcbqOF4q+1qBnzLE2kZ5JGhq0iMkcGXUKbFe7MpTA==
+ dependencies:
+ "@floating-ui/core" "^1.2.1"
+
+"@floating-ui/vue@^0.2.1":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@floating-ui/vue/-/vue-0.2.1.tgz#a52b66e020897ad0535d0d0d3b09932446fc6231"
+ integrity sha512-HE+EIeakID7wI6vUwF0yMpaW48bNaPj8QtnQaRMkaQFhQReVBA4bY6fmJ3J7X+dqVgDbMhyfCG0fBJfdQMdWxQ==
+ dependencies:
+ "@floating-ui/dom" "^1.2.1"
+ vue-demi "^0.13.11"
+
"@headlessui/vue@^1.7.3":
version "1.7.3"
resolved "https://registry.npmjs.org/@headlessui/vue/-/vue-1.7.3.tgz"
@@ -1498,6 +1518,11 @@
dependencies:
vue "^2.5.16"
+"@types/web-bluetooth@^0.0.16":
+ version "0.0.16"
+ resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8"
+ integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==
+
"@typescript-eslint/eslint-plugin@^5.0.0":
version "5.40.1"
resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.1.tgz"
@@ -1873,6 +1898,28 @@
resolved "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.1.3.tgz"
integrity sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==
+"@vueuse/core@^9.12.0":
+ version "9.12.0"
+ resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-9.12.0.tgz#e5b20f901e081c7ae5fe0e5f3af217929034eefe"
+ integrity sha512-h/Di8Bvf6xRcvS/PvUVheiMYYz3U0tH3X25YxONSaAUBa841ayMwxkuzx/DGUMCW/wHWzD8tRy2zYmOC36r4sg==
+ dependencies:
+ "@types/web-bluetooth" "^0.0.16"
+ "@vueuse/metadata" "9.12.0"
+ "@vueuse/shared" "9.12.0"
+ vue-demi "*"
+
+"@vueuse/metadata@9.12.0":
+ version "9.12.0"
+ resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-9.12.0.tgz#19a0fefcba6a66a2382af10a7a67ebad6eec1f27"
+ integrity sha512-9oJ9MM9lFLlmvxXUqsR1wLt1uF7EVbP5iYaHJYqk+G2PbMjY6EXvZeTjbdO89HgoF5cI6z49o2zT/jD9SVoNpQ==
+
+"@vueuse/shared@9.12.0":
+ version "9.12.0"
+ resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-9.12.0.tgz#e6597da80084cba8fc3d6545f4c2fa9817b80428"
+ integrity sha512-TWuJLACQ0BVithVTRbex4Wf1a1VaRuSpVeyEd4vMUWl54PzlE0ciFUshKCXnlLuD0lxIaLK4Ypj3NXYzZh4+SQ==
+ dependencies:
+ vue-demi "*"
+
abab@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
@@ -5196,7 +5243,7 @@ vitest@^0.28.1:
vite-node "0.28.1"
why-is-node-running "^2.2.2"
-vue-demi@*:
+vue-demi@*, vue-demi@^0.13.11:
version "0.13.11"
resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz"
integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==