From 0c050c68d27977a36ca15524d097e4e470abb2b9 Mon Sep 17 00:00:00 2001 From: David Hernando Date: Mon, 27 May 2024 13:48:48 +0200 Subject: [PATCH 001/172] added dummy README file --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..b634566 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# CSPR.name contracts + +... From cd1bde725b81c7a7d4a653d926132eef68917449 Mon Sep 17 00:00:00 2001 From: David Hernando Date: Mon, 27 May 2024 13:50:52 +0200 Subject: [PATCH 002/172] added gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a09c56d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea From b19556667690ad8bb66968e2be84d3bb63cd9edf Mon Sep 17 00:00:00 2001 From: David Hernando Date: Mon, 27 May 2024 13:52:29 +0200 Subject: [PATCH 003/172] added happy path scenarios --- docs/sequence-diagrams/Admin functions.md | 30 ++++++++++++++++++ docs/sequence-diagrams/Manage a domain.md | 17 ++++++++++ docs/sequence-diagrams/README.md | 9 ++++++ docs/sequence-diagrams/Register a domain.md | 10 ++++++ docs/sequence-diagrams/Renew a domain.md | 10 ++++++ docs/sequence-diagrams/Resolution.md | 11 +++++++ .../puml/approve-revoke-operator.png | Bin 0 -> 14753 bytes .../puml/approve-revoke-operator.puml | 24 ++++++++++++++ docs/sequence-diagrams/puml/burn-domain.png | Bin 0 -> 17595 bytes docs/sequence-diagrams/puml/burn-domain.puml | 23 ++++++++++++++ .../puml/delist-controller.png | Bin 0 -> 8976 bytes .../puml/delist-controller.puml | 15 +++++++++ docs/sequence-diagrams/puml/expire-domain.png | Bin 0 -> 21991 bytes .../sequence-diagrams/puml/expire-domain.puml | 26 +++++++++++++++ .../puml/lookup-account-name.png | Bin 0 -> 8951 bytes .../puml/lookup-account-name.puml | 15 +++++++++ .../puml/offchain-purchase.png | Bin 0 -> 20454 bytes .../puml/offchain-purchase.puml | 30 ++++++++++++++++++ .../puml/offchain-renewal.png | Bin 0 -> 21651 bytes .../puml/offchain-renewal.puml | 30 ++++++++++++++++++ .../puml/onchain-purchase.png | Bin 0 -> 21071 bytes .../puml/onchain-purchase.puml | 28 ++++++++++++++++ .../puml/onchain-renewal.png | Bin 0 -> 22945 bytes .../puml/onchain-renewal.puml | 28 ++++++++++++++++ docs/sequence-diagrams/puml/resolve-name.png | Bin 0 -> 13492 bytes docs/sequence-diagrams/puml/resolve-name.puml | 19 +++++++++++ docs/sequence-diagrams/puml/set-resolver.png | Bin 0 -> 14362 bytes docs/sequence-diagrams/puml/set-resolver.puml | 22 +++++++++++++ .../puml/set-reverse-resolution.png | Bin 0 -> 20400 bytes .../puml/set-reverse-resolution.puml | 23 ++++++++++++++ .../puml/transfer-domain.png | Bin 0 -> 24585 bytes .../puml/transfer-domain.puml | 29 +++++++++++++++++ .../puml/whitelist-controller.png | Bin 0 -> 9342 bytes .../puml/whitelist-controller.puml | 15 +++++++++ .../puml/whitelist-registrar.png | Bin 0 -> 9257 bytes .../puml/whitelist-registrar.puml | 15 +++++++++ 36 files changed, 429 insertions(+) create mode 100644 docs/sequence-diagrams/Admin functions.md create mode 100644 docs/sequence-diagrams/Manage a domain.md create mode 100644 docs/sequence-diagrams/README.md create mode 100644 docs/sequence-diagrams/Register a domain.md create mode 100644 docs/sequence-diagrams/Renew a domain.md create mode 100644 docs/sequence-diagrams/Resolution.md create mode 100644 docs/sequence-diagrams/puml/approve-revoke-operator.png create mode 100644 docs/sequence-diagrams/puml/approve-revoke-operator.puml create mode 100644 docs/sequence-diagrams/puml/burn-domain.png create mode 100644 docs/sequence-diagrams/puml/burn-domain.puml create mode 100644 docs/sequence-diagrams/puml/delist-controller.png create mode 100644 docs/sequence-diagrams/puml/delist-controller.puml create mode 100644 docs/sequence-diagrams/puml/expire-domain.png create mode 100644 docs/sequence-diagrams/puml/expire-domain.puml create mode 100644 docs/sequence-diagrams/puml/lookup-account-name.png create mode 100644 docs/sequence-diagrams/puml/lookup-account-name.puml create mode 100644 docs/sequence-diagrams/puml/offchain-purchase.png create mode 100644 docs/sequence-diagrams/puml/offchain-purchase.puml create mode 100644 docs/sequence-diagrams/puml/offchain-renewal.png create mode 100644 docs/sequence-diagrams/puml/offchain-renewal.puml create mode 100644 docs/sequence-diagrams/puml/onchain-purchase.png create mode 100644 docs/sequence-diagrams/puml/onchain-purchase.puml create mode 100644 docs/sequence-diagrams/puml/onchain-renewal.png create mode 100644 docs/sequence-diagrams/puml/onchain-renewal.puml create mode 100644 docs/sequence-diagrams/puml/resolve-name.png create mode 100644 docs/sequence-diagrams/puml/resolve-name.puml create mode 100644 docs/sequence-diagrams/puml/set-resolver.png create mode 100644 docs/sequence-diagrams/puml/set-resolver.puml create mode 100644 docs/sequence-diagrams/puml/set-reverse-resolution.png create mode 100644 docs/sequence-diagrams/puml/set-reverse-resolution.puml create mode 100644 docs/sequence-diagrams/puml/transfer-domain.png create mode 100644 docs/sequence-diagrams/puml/transfer-domain.puml create mode 100644 docs/sequence-diagrams/puml/whitelist-controller.png create mode 100644 docs/sequence-diagrams/puml/whitelist-controller.puml create mode 100644 docs/sequence-diagrams/puml/whitelist-registrar.png create mode 100644 docs/sequence-diagrams/puml/whitelist-registrar.puml diff --git a/docs/sequence-diagrams/Admin functions.md b/docs/sequence-diagrams/Admin functions.md new file mode 100644 index 0000000..3cabc97 --- /dev/null +++ b/docs/sequence-diagrams/Admin functions.md @@ -0,0 +1,30 @@ +# Admin functions + +## Registry admin + +### Whitelist registrar + +![](puml/whitelist-registrar.png) + +_used also to delist a registrar_ + +## Registrar admin + +### Expire a domain + +![](puml/expire-domain.png) + +### Burn a domain + +![](puml/burn-domain.png) + +### Whitelist a controller contract + +![](puml/whitelist-controller.png) + +### Delist a controller contract + +![](puml/delist-controller.png) + +`whitelist_controller(package_hash Address, enabled bool)` + diff --git a/docs/sequence-diagrams/Manage a domain.md b/docs/sequence-diagrams/Manage a domain.md new file mode 100644 index 0000000..9f93a98 --- /dev/null +++ b/docs/sequence-diagrams/Manage a domain.md @@ -0,0 +1,17 @@ +# Manage a domain + +## Set a resolver + +![](puml/set-resolver.png) + +## Set reverse resolution + +![](puml/set-reverse-resolution.png) + +## Transfer + +![](puml/transfer-domain.png) + +## Approve / revoke an operator + +![](puml/approve-revoke-operator.png) diff --git a/docs/sequence-diagrams/README.md b/docs/sequence-diagrams/README.md new file mode 100644 index 0000000..54dc07d --- /dev/null +++ b/docs/sequence-diagrams/README.md @@ -0,0 +1,9 @@ +# Sequence diagrams + +## Index + +* [Register a domain](./Register%20a%20domain.md) +* [Renew a domain](./Renew%20a%20domain.md) +* [Resolution](./Resolution.md) +* [Manage a domain](./Manage%20a%20domain.md) +* [Admin functions](./Admin%20functions.md) diff --git a/docs/sequence-diagrams/Register a domain.md b/docs/sequence-diagrams/Register a domain.md new file mode 100644 index 0000000..11416b0 --- /dev/null +++ b/docs/sequence-diagrams/Register a domain.md @@ -0,0 +1,10 @@ +# Buy a domain + +## Off-chain purchase + +![](puml/offchain-purchase.png) + +## On-chain purchase + +![](puml/onchain-purchase.png) + diff --git a/docs/sequence-diagrams/Renew a domain.md b/docs/sequence-diagrams/Renew a domain.md new file mode 100644 index 0000000..1711ae3 --- /dev/null +++ b/docs/sequence-diagrams/Renew a domain.md @@ -0,0 +1,10 @@ +# Renew a domain + +## Off-chain renewal + +![](puml/offchain-renewal.png) + +## On-chain renewal + +![](puml/onchain-renewal.png) + diff --git a/docs/sequence-diagrams/Resolution.md b/docs/sequence-diagrams/Resolution.md new file mode 100644 index 0000000..04af175 --- /dev/null +++ b/docs/sequence-diagrams/Resolution.md @@ -0,0 +1,11 @@ +# Resolution + +## Resolve name + +![](puml/resolve-name.png) + +## Look up account name + +![](puml/lookup-account-name.png) + + diff --git a/docs/sequence-diagrams/puml/approve-revoke-operator.png b/docs/sequence-diagrams/puml/approve-revoke-operator.png new file mode 100644 index 0000000000000000000000000000000000000000..043414d8e4cf46155304c2e1bb5f6733bde2bc39 GIT binary patch literal 14753 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 literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/approve-revoke-operator.puml b/docs/sequence-diagrams/puml/approve-revoke-operator.puml new file mode 100644 index 0000000..e53efb9 --- /dev/null +++ b/docs/sequence-diagrams/puml/approve-revoke-operator.puml @@ -0,0 +1,24 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor Owner +participant "Registry" + +== Approve operator (marketplace) == + +Owner -> Registry: approve() +activate Registry +Registry -> Registry: set operator +Registry -> Owner +deactivate Registry + +== Revoke approval == + +Owner -> Registry: revoke() +activate Registry +Registry -> Registry: clear operator +Registry -> Owner +deactivate Registry + +@enduml diff --git a/docs/sequence-diagrams/puml/burn-domain.png b/docs/sequence-diagrams/puml/burn-domain.png new file mode 100644 index 0000000000000000000000000000000000000000..27bd194cbde71cf7833539a12d053f153a7c7b54 GIT binary patch literal 17595 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 k>yKuUKYlzS`2zjP%nL_ZYj!8_D "Registrar": admin_burn() +activate Registrar +Registrar -> Registry: burn() +activate Registry +Registry -> Registry: Clear resolver +Registry -> Registry: burn token +Registry -> Registrar +deactivate Registry +Registrar -> "D3 admin" +deactivate Registrar + +@enduml diff --git a/docs/sequence-diagrams/puml/delist-controller.png b/docs/sequence-diagrams/puml/delist-controller.png new file mode 100644 index 0000000000000000000000000000000000000000..f0f21e35aafecca6c73dc014822b2b7a7580e374 GIT binary patch literal 8976 zcmc(FcQjnxzc)$d!4QPeiIR}fdx;t)(Pa?5_udk{XY>{X(W2KdVi-aqdJ7Un?_IPZ zj5_K)&+~hp``-0i@4MD}*Zt%EvDY^HoU_k9dw=)$Q??kGhT>f?Ef@y}=dQAnf)-Fu z;NajA;ok!O64hP|2PzKFr}~~&Zti~0HnyHPiZ-q`FD*Q6teGtRnCv}0-Cv3G^13@) zxO#fIIP+M!xp)uuGXh;ab9kZe`A<6zF3^wf`|)Hmr;aB?ZHtHO9j0SZ=ZrKF#5v*_ z+9HT^@j;Ot;u&L~9~39MJ~|={XhJl1`r4^#hdQUGu5q&bj!7}1!?gN4g=nU$WvuB_ z#y4UGOyeA=3LJa(N0BBT4+%N$S$Vvp%qlp#pR+mA>5D2+)3Z!##*Jn%hVA8LP*XZ# z-lHEMi9Ng5rX1QnFHB|W4>#q7HH{LD)svkIFLSs)-0;#mM^Tk_IlSUg3*ot$wEHU5 zTEB>>VKZ{*6x$@e==AWJdy}?=sGG`LGADcUY#Et&X!EtRbm8^MFOR4+4-sZHx@u|h z12{3_MV0%GzNaj+bb421_o&aUbYmx{MkY#q29fm0KC#A0IKM$F_`V1-Uv&NDfr6#h z4}<87d3kq2r|wMcOds;jIp69lA`hBQDlWB|X<;s7b{rh$=gJDQFMLgRa|nIa?5=xz zWs>t($XM?wKh;AR-8)SxbSBmvc|<=UCQz-(0xpyhS=^g=k;MGfjE{@!{Q|F2M)x@w{P5AE z!>4zcUqc?gi2T2l9x{-q+roQ9XnsCZ%QtHKgjSpaRxV8#b06@2FcXL%jro6AYSQ4R zzZXde2-=^wz?oF6$U%%U!Sv+hDS3H`dEXAl?=W|;fi1zdj3u#oLJR{ax5ev>jPQ(% z=``N%?jJcaGT6Z!iA$;Uo^$X=v)1cux0ZXv$%--Mxo0`tMzsP0BC0ZPYDS7LFALY! zUR-}twXy-7qNh{R(z+=M@2nd$7w}%3+PvtpK9P_{d@y%)bu~1kHFLySFJD&`CSfmc zD1>)+cM}j01b)CDV~OM)7b(tPFa%rnJ$9L?iy~pfP_V$_s8Mm+>ayVNs>1x24XGIw z>`JoDIuNc=A}8;b2}p5%%O%(lIg~VAZ+}+{W~Kq+4zBOsbP}Zvhm55ww!duo^}QKh zrEU#DPu1+)(71b5O;qYFva0GTTcwuWm-6@79@8;&jk4whRbkRamw)?aJ$=?r%pfl6 zxYlgmKC-kloF(kk(TzsaJ7jbSd02WXbSXG|PSVm&57}?GcJRZds6)Q`9hT}WgtRUE z2%R_s|6r;%uhiwOxm@cT^%S4K#Hx1T>V3R~Ka|q6SQ%vCTROJ=k)_(%sDzE9t*VWI z?@UyoCYq4L#D=S?!eMeCDsDqu(CFwSs`GHeEj%LOqjs5Vm0|s2kZ2)tUxZV}XYZN4 zz3=Xf*Y=7<_?p#qNg+2ID9ceEBf7xVYFtYU!75rD^lIy|M565hb2!1=$WmsOJ9BmMVj| z=W7vIREf zpKO1WuC3WPP1+V(Uz{`pLqFKxS5SV|LrG}{{5U_BG9Q1(9irHWv?zL(;2+W*`}_|Q zV!46Gj~5BKUnLu}fEZ}~Ku!~$PNO}HZ!ORUpPaclWjt26RC?lLtfROM>$Yd=B?NjC zsq*PN={S3bqcwk&!-q>$(_QU`uAwdTqW2!O_#baK`7o08BI`nK_@Vd)Kc3YpfW?I{ z;EAf8Hw09xX0xAmBc??JUr`a+54VwHmqk-=v%`^hDcy@1FMG_CMH z35jDu?52+`RnJ>>|CY4mcSwn<^F2^W{XK_Gn~G-{1+#FQ<-YDQkU%JywgV%#KzR97 zNByKaY{`LqbziVsEs5aIqR@|4`+MR`jX%izJ7^iHBDA8o_CT=b{%l-&KwInMv;WzWmCM5ko?4EJW%>J0xa!^DOOHl z)3;l))Gk$9uDpxOWu+p^96B(N&xa6Tt~94YYejUnUJKt3;&+|9vt~i?sd;d45Zb

!nWV3?WykFtMNPh_0gnhJNIMiO__O~ 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 wb`ZxrTy "Registrar": delist_controller() +activate "Registrar" +"Registrar" -> Admin +deactivate "Registrar" + +@enduml diff --git a/docs/sequence-diagrams/puml/expire-domain.png b/docs/sequence-diagrams/puml/expire-domain.png new file mode 100644 index 0000000000000000000000000000000000000000..eedb58309eda99512ceb77688a943f9bf26411b9 GIT binary patch literal 21991 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 literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/expire-domain.puml b/docs/sequence-diagrams/puml/expire-domain.puml new file mode 100644 index 0000000..7708b4f --- /dev/null +++ b/docs/sequence-diagrams/puml/expire-domain.puml @@ -0,0 +1,26 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor "Anyone" +participant "Registrar" +participant "Registry" +participant "Resolver" + +== Expire the domain == + +"Anyone" -> "Registrar": expire() +activate Registrar +Registrar -> Registry: metadata() +Registry -> Registrar +Registrar -> Registrar: Check expiry date +group expiry date > blocktime + Registrar -> Registry: burn() + activate Registry + Registry -> Registry: burn token + Registry -> Registrar + deactivate Registry +end +Registrar -> "Anyone" + +@enduml diff --git a/docs/sequence-diagrams/puml/lookup-account-name.png b/docs/sequence-diagrams/puml/lookup-account-name.png new file mode 100644 index 0000000000000000000000000000000000000000..ae44c61955b815be2f65d0873f4b0587c5ac1570 GIT binary patch literal 8951 zcma)iby!s2zBejJHv&=v(j8Kgf^;b;GDr`hNVgy`$`H~eEg+53AR(Y54bsxxol42T z40rLXbI$wR^W68ZnYEuid#%0VQ{M@FprcAmKu3Uug+;8crlbcxN3gK25aC?~-=?js zLcj-)yE4?>(#hG|-rB|;OV!%Z+SS6{+KL(G&HT*W-Puh_P|(@l!qMHs!Ct`9$-%Sl zI|MvJ#r6@@{qO5oSHN>#yqk&bb!-+Q3*0-S;uZMDa!#lptEcc^i|d@#@s^ z50aMWD?(?xi<$h#wEl|L4~b0xHM?h-3KASYwf z)T*j~^8I3~k#sGiujfvckXzrkQ@@P4mV=DBhKv(*U&FhbHlq62SqyYp2xhCmLsc&P zjpzpyKOk9bqa$-|;W&1q#oBDZI)9)PY#Ia{33C_*G?WoPphOpksc6D_PoWMJ>@J8RD zNmBH!uUs;+-RO^v?Y5<6<10pnkQPx3nsSIA{4A;aUC`O7X5p`B4TZv=_OEhq!ZAOE0>}o4sI< zXy-u{W%nb=+Aa9e!gc)@+L?0kau=%WFcY-PfSa76V6MEPx*9w%E(U|g&VnY_P(-o5 zy_`sO?W0<+y;*G5WFd=yfjrW;9L28+hlU@)RpRa*K(a_L=lH+<_Mb)gKW}hd->aST zPZO~wz!0$FjaYi1Wnb(wv$3&BNYKE^sZ}U9+c!}y-@CsqQ^BoGgLrwJ_|3lF;^UKI zv$~V=j+(AsMn(qJEf`H0qJ+D(DJUj(R8;nLQGh%+gvQAvJI7#kHF4el3QLMijoVtt z^^2^*FqE|W`U4-I`fvE8=T{37gf=>uJNX>*^5i?(+X+-x%AlI?J9qBD<{U_oGG_i^ zL3e8(b}ow|qy>uB%RYS)<>Ap-UwIA9CHLVc-nj4b@GiX8X^w=1w2+qM@d_8G{P7(ER+G-^8CN5#9rA99cn%nW$M*lW0 zuMcDhiv1%~n3}u-HX&l?@m32}w1BW~vV5+|l8==0L&@g1^_BjdZ)zDUo6AmXSJ4X2 zC!w7mYN$;rox8;mg5mqsPIn@njzc~Ksc-OmS@8RJBqb+G!fBQvCoR@RLn4JgnMk{2 z2G!uQ6s#-<{U(?H>PH~C*j+`qqvMR>i-l(MNR=vBn~#6M;-ZnzOoWfNl(4*plgP%l zjf8&L!?HOwbf|u7+oqJJ)qt6XMp&L4G|2Tq>VVO;h{3tZ>OI&42`3%vq@bW1Lk0bg z6P5bm)X~Ua->0*))0|0eiojNT3_fq~Av1S3Csz(PWWI!2U@*5kqT$>kuGS5nJ8Qi! zDKlC^kaS|3r}^4xw_F|!h=kT-+dO~Rwps6cs&e<6@23Kb7M0yyS3FYe$IeTqaM z-;!}##jflwHJL#j(ZBi@%gXsVNKpDr4{@D1N$@_Irg1i7GKY35gUpM7B67rVZP`g% z_}HCjCC{%Zlfx8#9)2e#S12s?tdiFHZYaQGXd0Fe4GyM;#eQU#t7?2gOn%h2E9Oqt z@i|;?>F_9#UeiLp$Jh$U*G*IE@RjOay;V5Cf&pH(;|vc53ff~NHhtBw4|hp zQme_AC)_49b3M;KI+`TEn{UEyzcKaMjfN&khp)%Uf%xwiTi}1LtNU}^n27dZZx$^q zVD`cSW;`urvo*?IRX9Jd)^oE!Cw=cn9zBH`=cu%hy84tZclWLIbSHqywWXgvMT^2^ z>&z8BTz$fVPD@Ho9SC}S(I)loANysqS?6)$5B63J!k$>7BHf4y}QvP@z23#)g`j&VJnGdkeegI_+)y!rLM` zJ5yd(y{Wy%0`3w%IesrWYYNrbsELSj5pLER-!m@GIXgO@Les<@vamw8eQ#HPfO!xz zZiWx>_I=FsOT6Q`jXm9&$S-YJ5ipwSm*&%}g_iaGU2fSC1>GKe`~E$%g}ayn2pp`_JZ00rD5;@!=v&!swfyx|5vV zNybJZ>vijGtY8dk$WsopF()fe;h{8>;?l-OyYVR($~5)-+FJ;le2h(h#!RF4L4(&` zUz!A|;&QkRVB_QC;}~Ug^La1`^0T8cvlisD!CQe9c2-@?d|!KR^t`^z3~B0+;lb@#DwAHG;Dz4w^iY`wzjFNdk6M?V~gwSZy2ww zDpC^;9`4O$22}{yG08#+o+g=^nhFRAj8~MHA(@&3BF3enY$MpQ9336grM+w{Dzc*( zrGtewj|Ku#Xw!5{v6n76V0GQ8^$j^4qv!T`6Rb_?VIKONTOb-DPcj%mFF^uuk<^Zf zvAU)l`~Ce)IYudW^ULQj$%d69k#JYB7wXRJw4|2t9yHfoSy_SRt41^RX7>aG>Pjg_ zj*mmvNh_D6S#TsPl#3{6h?nw`OanT)x%-YbnWW&1i>P}1)FrEa<^ak`Bb;eD>A#loy1HF!-pomAxE(}sT<+8pQ)7Q7BF z!vnS=8_~>%e=D-kQ`FfB@`6#NFs`RZD~qnD%@>`;NT-;vf3egM43rrF3}dar;49az zk0)XV@--C2%F_hluiZ(oxfH{U(hsbZHg1RQU(y;_u7hUsPCj zVEaF`SXo|P#$&}>DHKDUErtt%OS;h*z?-&CPVmEZU5mgS-SDHN^mO$3K|gDaayT{E z^br5wS)Ve8Ade5a;yGXX_*7Qc8Pz(bOL_3{@)iwy;x>ndhVp4%V9+j~0XAjGzJw`- zkU}z&k~*?~_hiV@>81m34b{U({(QEd=b`P ze2xGqxe3b~kQ~-pbx~mJ>FGgr!NzZ87rAvF4L`q^gC4m~-BxL?HZU^)X)Z%zd^{*I zxbC4gP7{?lOM#*r8yg9e)N)6|59_uEb2@&lbg%WKxUCPc2p2%ph--TL`bes4?I-jO z)^SHYn=ZOIGbN>@7F}l>y#ZKa%y`+|^uwlclJdL{R=1)>wYv+gwJPSVZ-GQuYNxE38<=hYRpM63a26XqPNw7woMx>dy zzN2suAFmlHGGINQv@5e^LMN|G@qK)GqKec{iH&U%I8|GQ;q3-=H%nci%*aP6)6&z2 z3q1+i2Re?-)5}ZVV{;g+E7|T$gGAXQ-PY?fYJr>a+HgK$)7Wha#xPAjG8jfSj;;8IyF-GSTs4locG6@h@W7GlC>{(W=oc1HAR>7=V>MdAP{0B ztQ}7R#G>R!)FqEVt~PoaX8UKu2N!`!YYVn*o=={7V_!(E&JwqLY1!W-WUQ3$MGu5v;s2x*qYf zs$VYL1eumb-#qSjF!k6_)^&Dv7Vqvoypx@&+E1U}+Tq(YfNvcg9ZT$NJHrlDO*I=l zAN0<0DU&1z%C*@b6~-{HChOQy$SC%xz5Uzx_;^YRimTVIogRfX9X{;=Nn1?{8782YMWLcwI{U7%Yc$?{BFu89cB3eUlxFrY$l#~5! zR>$9At`pIgCqEz-Ke7d;YZx(zxuEA|NHx}bR zbnB2J>{dL6YEENqbv26Njw|N;6fiAi`vgyzS1M6wuDmsb{TwiYhlhtr1+4AoQU?e$ zjG<62EsJ=rDcfHUB#ut@7w%!$-;QP7!!0CRz^CMB+;1j4ho&j7>O8~_I+6f-V}E}i zAg?Xcr=dit}45D08Y+R%e`RdP!>iw`~t`}%#IV>Zl?a|cE60<{I}P- zIVuVcYWwp|*WSGNy}w{+Xn27dLozTh%r}A!p>lQ}lKm#^Z^JA_qFu zA&=z)=y3)KhgfLoYNv`Wbj*Hv>9z4A56DmBMZoUm)kg^irY^3o^=@k<&D-=;E;X_q zn^ac^1U{b4BS=Lj_ZGhehJ2f-dioibCT2&?$k=N#$p=e+oD`!Dhuzh?IA4=Dd;t*T z9fpFEvZ5TO>*?aMuobO&4%Fx+3pzi4&NBo#>yx)~DY_od)yLrMe=_66C%hc~WN~qE zoIQ)Lrchqo(qX3l#=`I4FO~p;Ao-1IgyeH_bFp=_LbiWRR@>DD>Ydu+<&`U=7p8#~ znL|Pz(j3Fb4=OxH-(vtkl1jQvO8Wj5(rJMDhKGm8V)X$@l}KA~lfjPX$d87PMV


!KoKgJlsny^pyv3o|9>_xEA#;2(q-av?GdBlC`C!A+V31X8MWWxs#F}m3M=K(MXd8-GxgD$**rh;95=+5)sMxp+x0h ze`?OPwByc|PwDLJboTUY|J0GWkFCb5B~_ECh>E|)AYJdd^HF*MKjv|=yFI@$&~ppA zUuoNs7c3=08{<#HE7Qse;@SisZ9X`GH=Tl(3sFq{AG&cK$K=S8`Pb_{^ zR8yrKa(ZH3?9VH}V2gqHl+H4(EV{HMBDsHz6Ch5#apMaY0Mj};I#E$kU{ct=^4uec zk1EOQERh#qINBWPRtV3`%xq|o4vqe6Aik(24w-xzAi&YDmgq$N{cST~}8ZIIzISY+rK*&T?z`17$B9_J(nClLF|}i*u0b3>~cY zZjD#u6cli(Ke&n@E!o5(SdVVf4vCouu&hlntXw;^$rQE`jnED`Jikv9s#A2Et4#j- zmy4|MCY_>d0Mq_gJiH7h0Td3GC)7v+$$hD^Rq-#eR|QpN0(5e&{FL%P4Uvue#74H^ zIl(&d>hLh-z|iC48gwt}P87iC_5NePfqPwJ?u4~R z+%)D>x+Yrz(c$Lhy~lUPzt-3&6WG$+OjcT4Y!5WHv9YnTGS2V;a2S=1AgK(*v`0e( zO@@!Q#$vZhYG+|xAl~)$^@WbJUB1a3l%}R8f=b+J_FY-q;2=4@LQfDMb@s*_Ql8M# zMCJSbzO&~Bu(FGb0gO{%p;-7j-;^vRw?nUf!<@bgY73L{+@@_V9J@zo1G888Oc4=s z_%uRUsTf+*^Muhl3ZoK1n>AX^sVi^y-Z_bQwn4JcGmwprM0QVXlQD>)QB9k!#Gdok#Z5<$i8HB|1?n%2Z61tiC z+z1sO8QG>?nMu6%ifX=iIC&J0WrV@tA}JG4Eeit-DjT z(aP#nK{K36NUN^6gSGxl8E+9Wv4m4?#ee0(!wvsmv2f1-z?KFelD?&6WJF1u{fEV; z+b!6+@}CZW_4e zdGqgQ&Qw|#QS&pwR}wxeD@!aeh*-7uq?EZ%%)#YnMyk6vhP-_!Th7r>qaYW0R?FW( zM%15n!XXnv3Kx4me4w2suDtmEy)}gge$Q}z*oepJugF)gPM_Ux367kedAU9PIl3s| z&rDZq)Qq^vlvuB&l6QaZv)dX-Ah3(MGo{ODYnuV0xoG~VzJDa0rb6D6wHg@s*PD~`xi9W0I z^$xhqyuXRs{#c%GqBM@A&Hd{4MbNad&zr6Cpm#VwalL4(VUHk&HvU$Fj8`ch3eh;u zUVu!U%P;Nv_*WXjAmy$`n?*)}vK#p*HcF+%2~^`E^;_AOa!pt=KLfA%+zf_3T`Mr8 z5)dxL3k+_b=kmdv>xZ`1OMe8F9^6ny1_st!i>0O|Z%f1fh=~QXbW&AcZb_Do_oX+~ z)w#ng{O#;sq}6j2VX)6n*IKr>r*H5+c7v#CsX@~+&6u^Gim@GbP*)cgzHk?~9&rkM zGHsGzqmZzGBV(1vR-EA@XJ@w6h=&Dz0I!Mh0pcC+(bY-4AF5g zHAPnp_+n0z>UzF^SKT9J+$>02=}94k2AA7d2!S0Zm=3i!7oxXliE@*DeD^Xl&iT;u z+aq1Zo1`~G)Rrgwd%s|Zsq?^lmhHH?C*ji^b8iRdlFaLRzP61{$e+uhUCtcW0%*72@uC1JD-CiYNi|KN8PRcu(5(jBzhUiisrua#OXv^C)M zYj@{TE%k|m%!}pUzlrRI^7*NlWB*KxOSA6zx%jjh9#!>=bVQ}U_dd-3rt`S?eYMS8 zzA30-(Fjs2_||KaL!UhhtbVHCfr*`nx$ugyCe|4f0n=y*bz* z4Jc++1{R7-!VtkzXEmTypabt{46qtk1WHy@N_tMq;Um;UGJuFl=AA4~3lqtdbg7nt zUGG=zFC4X(l2zfsfHdqjWUkcsGdU9mi5oI{R||ffct_sl)>LwXkeo0{E)bbzTM{A- z$s4@_j}1&`#kP0qLVMYUjA9i)L2b_eCGf4vwTwRe>?`PitGrCAe5 zwYm9MYpaq4c_QM^f?PaiWqY!E>iU!c#H^cpqhD`tZ(Daax7jrP`ej6xNwjxCQ4_6y zXpo17WS5t}Szg`&#@Mowm;Z~&qero+snj=aSns4n7xIHLW(0^YLB`$Q(E*}fLL=S4 z1#*sCk0LydIxIkfSxEWcD!94%sLOyYfLtqCNMZd)NKNM4FBJ52xUN>?bOcYYo!DroADHnpeArqCK)_@{I1^KHnWFtctYU;xCZr} zNP4#@SkfGb_5YN2?-w%iZte|a-2+zgDyK}%!L_Eq#eWrV<^4{%o65s3`8FpzJJ6Kr zjWS(U(gR51*c^yV5D3KH98xf19#nD_G%T>QL_i(=k7{kGRCLhM(;v;xol`hAWfF(~ zEYuQYUFXY}uYwe>`)S=P#O_`%3nop(iT;3pWPSy0xEv|A>ma454K1(XfWgZKo9jP|?Ohkw+&W721YS)$fq$T2sVnO! Jl`5JC{14rR+YA5z literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/lookup-account-name.puml b/docs/sequence-diagrams/puml/lookup-account-name.puml new file mode 100644 index 0000000..49b66cb --- /dev/null +++ b/docs/sequence-diagrams/puml/lookup-account-name.puml @@ -0,0 +1,15 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor Anyone +participant "Reverse Resolver" + +== Lookup account name == + +Anyone -> "Reverse Resolver": name() +activate "Reverse Resolver" +"Reverse Resolver" -> Anyone +deactivate "Reverse Resolver" + +@enduml diff --git a/docs/sequence-diagrams/puml/offchain-purchase.png b/docs/sequence-diagrams/puml/offchain-purchase.png new file mode 100644 index 0000000000000000000000000000000000000000..5c051bcb29c769fe1acea285c5e2f7687b4f2868 GIT binary patch literal 20454 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 ND9EYG7D<}~|1XaWWPbnv literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/offchain-purchase.puml b/docs/sequence-diagrams/puml/offchain-purchase.puml new file mode 100644 index 0000000..64a3bce --- /dev/null +++ b/docs/sequence-diagrams/puml/offchain-purchase.puml @@ -0,0 +1,30 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor User +participant "d3.app" as d3 +participant "Registrar" +participant "Registry" +participant "Resolver" + +== Offchain purchase == + +User -> d3: Buy +activate d3 +d3 -> d3: Process fiat payment +d3 -> User +deactivate d3 + +d3 -> Registrar: Register +activate Registrar +Registrar -> Registry: mint() +activate Registry +Registry -> Registry: mint token +Registry -> Registrar +deactivate Registry +Registrar -> d3 +deactivate Registrar +deactivate d3 + +@enduml diff --git a/docs/sequence-diagrams/puml/offchain-renewal.png b/docs/sequence-diagrams/puml/offchain-renewal.png new file mode 100644 index 0000000000000000000000000000000000000000..f9183e406a728d45470fcad8cefc46bd40d1744f GIT binary patch literal 21651 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 CF+-#P literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/offchain-renewal.puml b/docs/sequence-diagrams/puml/offchain-renewal.puml new file mode 100644 index 0000000..c651942 --- /dev/null +++ b/docs/sequence-diagrams/puml/offchain-renewal.puml @@ -0,0 +1,30 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor User +participant "d3.app" as d3 +participant "Registrar" +participant "Registry" +participant "Resolver" + +== Offchain renewal == + +User -> d3: Renew +activate d3 +d3 -> d3: Process fiat payment +d3 -> User +deactivate d3 + +d3 -> Registrar: Renew +activate Registrar +Registrar -> Registry: set_token_metadata() +activate Registry +Registry -> Registry: update metadata +Registry -> Registrar +deactivate Registry +Registrar -> d3 +deactivate Registrar +deactivate d3 + +@enduml diff --git a/docs/sequence-diagrams/puml/onchain-purchase.png b/docs/sequence-diagrams/puml/onchain-purchase.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5d0cccbd8780200437fa0594a07c1a7913c8d3 GIT binary patch literal 21071 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 literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/onchain-purchase.puml b/docs/sequence-diagrams/puml/onchain-purchase.puml new file mode 100644 index 0000000..f913c20 --- /dev/null +++ b/docs/sequence-diagrams/puml/onchain-purchase.puml @@ -0,0 +1,28 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor User +participant "Controller" +participant "Registrar" +participant "Registry" +participant "Resolver" + +== Onchain purchase == + +User -> Controller: Buy +activate Controller +Controller -> Controller: Process CSPR payment +Controller -> Registrar: Register +activate Registrar +Registrar -> Registry: mint() +activate Registry +Registry -> Registry: mint token +Registry -> Registrar +deactivate Registry +Registrar -> Controller +deactivate Registrar +Controller -> User +deactivate Controller + +@enduml diff --git a/docs/sequence-diagrams/puml/onchain-renewal.png b/docs/sequence-diagrams/puml/onchain-renewal.png new file mode 100644 index 0000000000000000000000000000000000000000..4adab0d11030ba3c96d80eeb67e0ea99412a9e57 GIT binary patch literal 22945 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

r1xX{_fAa-e|f$_C{}l-)34IpGhHR z_+IvM2u*II2*aYe z%a`SD6>h(`HkXn*oig5)iIAda;cH{xnsK(tPTJ)45MI|`gf4uUvF8-@ibHdQE*jsi zCJ}KBxz^Uy)bv2^02DUJ9e*4f-@0P1z;LA(UzJe>_vVGzTz(BL366OG-_0y>+TppL zsklDfc^dk3pd;7Y`*$ zw_$y8M{2danwDK=bv4T#%4i%LqDmQf-m(@%1XxO%o;+qm;f7J#KL9gyu4c~m7eyCb zU9>5(Bu`Kd4p_vr?KG*cnijh$Gc4b4iYNlC)>vl}OM6oDxfKj=fj-syPj7A|-Q0O? z-c?bdIejG2Wz)|Pwc1G3ocsU3*(Lb>o21K578jj2XF&@sQLDNU&UPU%tS59DV~r@C zo**kWQMN4KT6J2T7oi~w(p#GJj=&4$Xo;9X=KHLckQ+icMK9DXTeKw{ zm=!i`@Y33wyYpo;QK7gyO*PqiDmVEiBKCTV%!9C&F~vW&v_mE>_o`dTuqS7~Bdch( z<;v>crrtyS*1>D`8?Q})gc=>5NPj0p_=0u^yx_^>e5K0zz&EY6Qt zr+hd#kF;G2j%Lk7nu>Q!w>1O|1^i(V&MzHTz(d{*A99Pn#(kRGG2p%>20fLmm)Om+ zJJ6$UzIRb5bugh;S?QdX@22dJ7gz7eR+{g&)OzsRHNNfno$bJ^fxZMw7@73k_kKN3 zZ}_^_;)V2`ek=Ba2M^K++H>g4XT28LiSGCeE~ZsMl zXM_|iNUwy^e~dF>1Cn$pz+)OpmOR~lOly%{tcMl|(vut*n9rAT6UN#&T!b-XW9AoP z|1TJ1;xZqesq4Dld4N!@MK{Q8ESSb8gl~6rR5g41ftJWbqbLWq;lb6g;EoN;%M|3 zoAWzWFYN+cA>FD69V31`=KU<;tLbj&@kRkNjmP=w*4887e)0qt>k9`R{qMJ-qf51% z`!}PR(7V%Il0S5T2XQ zVj1(ER*)NOGK@)#4kDqt^2U5XZH2;zj#?OVZeXdc{;C8b(=bUVJ$nTj z(j}ox;bz3Ul&qBntan~KPzV&UJ zjtXjCrq}Y>4aPV>u)is5`224}FLp;=hB~=o$6Wqi_&;L_xT-Z?!l-$B-v907g*3)3 zza(!M&zUV8f}M2Ojdk>XNSb5mCog|gTr8Nyw7q)L6zy*K7~wc)gNP8>nG&^0NwPHJ zl$3n^G9)BRIBul9Es+@tH#2_?NKBO3NnIYWd@JKcntU^i>yHtO)$B0)#gl|ORv1q# zj$cK&DDNb=L+-P8Fwc(ad6N3uN%=gNIl;$q2RoCZ?7>Nr5Sn9FJ;gRo+7Y?cW=L^A zD$Y9}698p1vfnhL;+e$I8pDLpS7Bk&wkZX536{Hd3CmbeUut9*8dNpZ?yu?16H&wn z9}ZS15@W_rEge34I|;!7!3Yn`s)Kf9yQ#L|KL?hUA*3f=yAHvXIfQ?WIsGw%^Y0ee zA5$|=e6NS%@taFeKZykfG!!GIeb(Zh-kiH|L=I3H%_1#v|J&B#yIpaz1%J=YV1(eq- zd2WBz(S*-P%AHX#$>B?u&ie#8aMUb7`{DGE25wnGH4~)4d_q&gD5I>6+MnpKNUHD$b3ny^)V?-Q(D) zs*m+5*rD^~b{%DEUbaDUR}l6??A+8bXnMNaMQWoc&=HmkJ(4&_h|cZK6nRJd-$;Dj ZjfY;IGNS)uJ^TVkN=*Jnmgw!r{|BGw3jzQD literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/onchain-renewal.puml b/docs/sequence-diagrams/puml/onchain-renewal.puml new file mode 100644 index 0000000..3807c37 --- /dev/null +++ b/docs/sequence-diagrams/puml/onchain-renewal.puml @@ -0,0 +1,28 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor Owner +participant "Controller" +participant "Registrar" +participant "Registry" +participant "Resolver" + +== Onchain renewal == + +Owner -> Controller: Renew +activate Controller +Controller -> Controller: Process CSPR payment +Controller -> Registrar: Renew +activate Registrar +Registrar -> Registry: set_token_metadata() +activate Registry +Registry -> Registry: update metadata +Registry -> Registrar +deactivate Registry +Registrar -> Controller +deactivate Registrar +Controller -> Owner +deactivate Controller + +@enduml diff --git a/docs/sequence-diagrams/puml/resolve-name.png b/docs/sequence-diagrams/puml/resolve-name.png new file mode 100644 index 0000000000000000000000000000000000000000..16f5e97c76bfe7a82d3f917c678defe8966a8df5 GIT binary patch literal 13492 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 Registry: metadata() +Registry -> User + +User -> User: Extract "Resolver" + +User -> Resolver: get_address() +Resolver -> User + +@enduml diff --git a/docs/sequence-diagrams/puml/set-resolver.png b/docs/sequence-diagrams/puml/set-resolver.png new file mode 100644 index 0000000000000000000000000000000000000000..3addb1628404640a13da503dfdd71dc7355d29d4 GIT binary patch literal 14362 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 Controller: Set resolver +activate Controller + +Controller -> Registry: set_token_metadata() +activate Registry +Registry -> Controller +deactivate Registry +Controller -> User +deactivate Controller +@enduml diff --git a/docs/sequence-diagrams/puml/set-reverse-resolution.png b/docs/sequence-diagrams/puml/set-reverse-resolution.png new file mode 100644 index 0000000000000000000000000000000000000000..77121db8ea9f3f1727fc1e60d5537a3ea927cda4 GIT binary patch literal 20400 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 Controller: Set reverse resolution +activate Controller +Controller -> "Reverse Resolver": set_reverse_resolution() +activate "Reverse Resolver" +"Reverse Resolver" -> "Registrar": owner_of() +Registrar -> "Reverse Resolver" +"Reverse Resolver" -> "Reverse Resolver": update name resolver record +"Reverse Resolver" -> "Controller" +deactivate "Reverse Resolver" +Controller -> Owner +deactivate Controller +@enduml diff --git a/docs/sequence-diagrams/puml/transfer-domain.png b/docs/sequence-diagrams/puml/transfer-domain.png new file mode 100644 index 0000000000000000000000000000000000000000..3c76c52989ca343aae0ebdd71e611eb7c9a714b4 GIT binary patch literal 24585 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 literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/transfer-domain.puml b/docs/sequence-diagrams/puml/transfer-domain.puml new file mode 100644 index 0000000..af4cf5c --- /dev/null +++ b/docs/sequence-diagrams/puml/transfer-domain.puml @@ -0,0 +1,29 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor Owner +actor Operator +participant "Registry" + +== Transfer token == + +Owner -> Registry: transfer() +activate Registry +Registry -> Registry: Clear resolver +Registry -> Registry: Clear operator +Registry -> Registry : Set new owner +Registry -> Owner +deactivate Registry + +== Transfer token by operator == + +Operator -> Registry: transfer_from() +activate Registry +Registry -> Registry: Clear resolver +Registry -> Registry: Clear operator +Registry -> Registry : Set new owner +Registry -> Operator +deactivate Registry + +@enduml diff --git a/docs/sequence-diagrams/puml/whitelist-controller.png b/docs/sequence-diagrams/puml/whitelist-controller.png new file mode 100644 index 0000000000000000000000000000000000000000..19f373b09d24cbed33a56780e7b99bfb1e50539c GIT binary patch literal 9342 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 "Registrar": whitelist_controller() +activate "Registrar" +"Registrar" -> Admin +deactivate "Registrar" + +@enduml diff --git a/docs/sequence-diagrams/puml/whitelist-registrar.png b/docs/sequence-diagrams/puml/whitelist-registrar.png new file mode 100644 index 0000000000000000000000000000000000000000..27b1de86562fc1c94c0f16905de82e6a66c2d78e GIT binary patch literal 9257 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 literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/whitelist-registrar.puml b/docs/sequence-diagrams/puml/whitelist-registrar.puml new file mode 100644 index 0000000..20a6d77 --- /dev/null +++ b/docs/sequence-diagrams/puml/whitelist-registrar.puml @@ -0,0 +1,15 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor Admin +participant "Registry" + +== Whitelist registrar contract == + +Admin -> "Registry": set_variables() +activate "Registry" +"Registry" -> Admin +deactivate "Registry" + +@enduml From eda23e07e169c9c21da855a4a5a5de5789179e80 Mon Sep 17 00:00:00 2001 From: David Hernando Date: Mon, 27 May 2024 14:12:13 +0200 Subject: [PATCH 004/172] added emitted events --- .../puml/approve-revoke-operator.png | Bin 14753 -> 21387 bytes .../puml/approve-revoke-operator.puml | 3 +++ docs/sequence-diagrams/puml/burn-domain.png | Bin 17595 -> 22372 bytes docs/sequence-diagrams/puml/burn-domain.puml | 4 +++- docs/sequence-diagrams/puml/expire-domain.png | Bin 21991 -> 24644 bytes .../sequence-diagrams/puml/expire-domain.puml | 3 ++- .../puml/offchain-purchase.png | Bin 20454 -> 24731 bytes .../puml/offchain-purchase.puml | 2 ++ .../puml/offchain-renewal.png | Bin 21651 -> 24941 bytes .../puml/offchain-renewal.puml | 3 ++- .../puml/onchain-purchase.png | Bin 21071 -> 27208 bytes .../puml/onchain-purchase.puml | 3 +++ .../puml/onchain-renewal.png | Bin 22945 -> 28359 bytes .../puml/onchain-renewal.puml | 4 +++- docs/sequence-diagrams/puml/set-resolver.png | Bin 14362 -> 18222 bytes docs/sequence-diagrams/puml/set-resolver.puml | 3 ++- .../puml/transfer-domain.png | Bin 24585 -> 31661 bytes .../puml/transfer-domain.puml | 3 +++ .../puml/whitelist-registrar.png | Bin 9257 -> 13188 bytes .../puml/whitelist-registrar.puml | 2 ++ 20 files changed, 25 insertions(+), 5 deletions(-) diff --git a/docs/sequence-diagrams/puml/approve-revoke-operator.png b/docs/sequence-diagrams/puml/approve-revoke-operator.png index 043414d8e4cf46155304c2e1bb5f6733bde2bc39..10f1e1742803e977434070040a43016c735d7fd8 100644 GIT binary patch literal 21387 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 literal 14753 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 diff --git a/docs/sequence-diagrams/puml/approve-revoke-operator.puml b/docs/sequence-diagrams/puml/approve-revoke-operator.puml index e53efb9..89b4d4b 100644 --- a/docs/sequence-diagrams/puml/approve-revoke-operator.puml +++ b/docs/sequence-diagrams/puml/approve-revoke-operator.puml @@ -4,12 +4,14 @@ 'autonumber actor Owner participant "Registry" +boundary "Events" == Approve operator (marketplace) == Owner -> Registry: approve() activate Registry Registry -> Registry: set operator +Registry -> "Events": Approval event Registry -> Owner deactivate Registry @@ -18,6 +20,7 @@ deactivate Registry Owner -> Registry: revoke() activate Registry Registry -> Registry: clear operator +Registry -> "Events": ApprovalRevoked event Registry -> Owner deactivate Registry diff --git a/docs/sequence-diagrams/puml/burn-domain.png b/docs/sequence-diagrams/puml/burn-domain.png index 27bd194cbde71cf7833539a12d053f153a7c7b54..564cff6fecadddb840f53f7dbf672a6e156f3b2c 100644 GIT binary patch literal 22372 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 k>yKuUKYlzS`2zjP%nL_ZYj!8_D Registry: burn() activate Registry Registry -> Registry: Clear resolver +Registry -> "Events": MetadataUpdated event Registry -> Registry: burn token +Registry -> "Events": Burn event Registry -> Registrar deactivate Registry Registrar -> "D3 admin" diff --git a/docs/sequence-diagrams/puml/expire-domain.png b/docs/sequence-diagrams/puml/expire-domain.png index eedb58309eda99512ceb77688a943f9bf26411b9..46eaad8d26801b57464391e824c97a6eb0cb1a83 100644 GIT binary patch literal 24644 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 diff --git a/docs/sequence-diagrams/puml/expire-domain.puml b/docs/sequence-diagrams/puml/expire-domain.puml index 7708b4f..e3ed40b 100644 --- a/docs/sequence-diagrams/puml/expire-domain.puml +++ b/docs/sequence-diagrams/puml/expire-domain.puml @@ -5,7 +5,7 @@ actor "Anyone" participant "Registrar" participant "Registry" -participant "Resolver" +boundary "Events" == Expire the domain == @@ -18,6 +18,7 @@ group expiry date > blocktime Registrar -> Registry: burn() activate Registry Registry -> Registry: burn token + Registry -> "Events": Burn event Registry -> Registrar deactivate Registry end diff --git a/docs/sequence-diagrams/puml/offchain-purchase.png b/docs/sequence-diagrams/puml/offchain-purchase.png index 5c051bcb29c769fe1acea285c5e2f7687b4f2868..0e24a423a81a03e3cd1875e490fb4831124b53d1 100644 GIT binary patch literal 24731 zcmb4rc_3AL)V6t^=M=Nqq+_M@VlrOxmv*0 zq05f;Zl69JgvJq@xQ|EDPlIm`LkKFL)eDgeI5JLriq8vb?__4S72GwU zpV*8d%RX=E<#Ri>(mWC8BEwFaPhzvA^Odp4huN-Ilk(hhm&cOcmi2c@$DU|!I^S8e zR3FoveUV6j+%WP@t2DRI8}=H6`-iHpp}K^J9+0xwvh%gE+9qR}@U}TmglHg>6=O_4 ziZfozaTCQ~Ipb-Zc8%>(7gw?tQ{vfyYo#Cib=6w?f~#oG@HI7)+O49F` z;MLa8P#x)co|GH%Qh|^;k-vd;U|R#<=an>D*7`d87HTla4X1~1!=T;id9cgRPb!Me zBjWKcPE*MvhXyCG!USk|eJ|-(y=K{&4IzwpxBo>-)T#_pMtgulvp%OMT=#BQV}qGA_RQv5b+CHjs@dFx=?@ zGZmg9)#V_xKm0j@6N0Tsh1ZBrf(ze9lZFKkE={(pt2&Z@7itu{9zh$y6iuh8^v zB+A;_+8!RYTkEN*5)YCex+c;Y5s-FQAODU8w;06p3Lcyrtcl@KNs{%_io&~rE$xwh z&*daMEST^*13?10LSOukfD8qeByo81T=+*c!gGPn&KdtkfRwKOyA$w~p`~sfvMlXn zlVYb5Qvv~o=fumIr3x_Kq{H8W*(E(+tzA1=uAuc?_&Yx4*S+xT{QUM&90fjI^LM21 zq}q~vEhbCLp^=_cy|fA!MxsEraOca3h=E9W&C{#!`?bIS&k$ZLdfFjN4t9zW-MIJNsS5b z%BLhgQFeHgci?|cDjnwLT#USA@Dnv5T_$*+C{tddnhWMWqWbvB((ZAO1+cwhSTWOh zLxe6^k^AJ0_pmxo7=QgX4FMCzR-%B!OvTNB|M?+jt}b7CrFx&$y!@8)=!d*#XKxcz z`k7cDr#iYt?Y{JvES46&{keBH1bW_pINE7#?sop=nx{{$T>th~bs_a(HO@+745v=2 z9Ow5ohP|gV4O+Y?^IBCr+uXdiHsU<~N|Q^`v`X4}tT#9~qyGL;P4{$)y%#(q5zU`x zRxW8-o3OjH>TgO6%O~m38(iu>tKpu3v;Uj!WPao;tQSs86P_hlx+EP(<$a&9EE4?s zGM@ja?5!iTC-t{Y6;0iKN=evg7r5Nl_%+}P1JAX&-J#)_QFU|cM<;En*B8e#r8D>D z98Dyx$9itygEZ6UFSKXTD19Em$Oq^St&W8cv<1w{b~H{q|CY1Zbz( zzH&;rHLM*C7R&}CN-Q|ZE@O&|Z1_}hxjmhQJ{0CfCq-s`ZGL#J>t2yH?5M~ZI2$%! z8#2_-Eu40=Lkf~Pq4cw~t8up8Ojg+zdoCKfEV(48Yo#3ds6tG6|6X|b`mCS3I_C-2 z-sR+tCk64#pKJ#%}Q@#f67=Pqy3il{l+1XSq(RMQ{1U7FyQbN%h@O zHwv*vg>T)Xp*=agHZR~ArEO-IXO`FL$h$zA<&#yxyHb#1qHw}UH1|^CJMZ-i3(3xx z(jsg=B?*#uN{Lz9C|OzMZWX_cv+J7q>T-261lbfPn4O(X!)a6{bmA*{@5=^Gm!0Tj zAFr>4*V-(|2>!TdZEbDiYHkqD4Rz%=_q2K*q1=9U-K%_9=-7{BaOAeWa^+L1yt%C? zuG^f(OE>HoQO{sgI_Y=jHgn(Hr%21=UBBQgS#9)pV;^tEMX`pDfgYlN|k6iqT>KE7{)mHI{gcLK)2lu=e*B7iM z8kr`wv%3Yz+-G_pA&}^rFv?5{>VXg`G1-`WqDtkaikU9jt(D{rrCICbH(0VpqG^bP zY5LHUHlIEvNnY^1D#|Ursjcy0sBHTs*YY9ryS}{W+17%*&1Jkwn8;QyV;eyQN<(s9 zG9IrGY&A8tg4wR~_m4=*xzCtR&cvd$n67U`s?F0LQ^5?^z0%>I!yWNQ$oOt~^cEAp z-H{K?&23uosc9xaqK30YMi0GV{-3W(NZH9tDIKoY>3#DfZR^MgjFY07UV(mLMZUOa zoApIqk;(ZdH?J>&YkDb5L?@AmN8{wqV_YqdUi4{zhS64f}Qm-J) zVtuHbDli&q(ip8)e?x~(K6}C=~8fTFGJB0pi7*`pFDkP^Xcr` zeEqhhWM$0=7KwmqrLTK`Ma}Ko>L*T|&{ci+NRXE_h^Nx^#NxWJO?U8{bZ$ONq*38j zYg5y<>Y!s?dHtsOmZQv~fuqZZ=;|*Ixv2i?ja4OVBssW)0-&Iea($bxnJ@u?K8@VV%~RO0%@T`rzjLkYE8D1Hp~;xtjYHeNG#Nos_W_ zlxXddIypwZd-pl|^1rwvB$Snu8W$QK(53}F(@Eugr7%lZ$IWwOWXjM~P=Yyz?gA zb*#Db)g`ZrIi<;k(c``wlM>=ZN(>?FrwU(%g=O_pSbxb~M_d*(E-)y$NpC?J$l~@b zyWPv_+{WgGl*sx^RcveE>sHay5WK(8P6O?yZwUcJ{@zv6Y_; zzWxEMxy%M6K_A2(5GGptR!BGv9HU|mHq9|i?#vM<3Zn`h?7Z-8X}U)Tm1p{hgnjnA z7y4@eT^=4MiSiCChtC>Pm@0@>cH>iO<#Zk6j~Z((hS2Y&l*hOPf{|FxdUo<(@nde^ zmz%1*`uW2>7U`O?Lx<#PrA=j3A{btp_FQg=YGD?4pb%m=)-_!iTH_sJvGX~W;m@i1 zsWWF)BtvkJC1ACGmZC<4gTrBM?gTywUHIK(t?6WGKV6iC;+&A_n#$8NT6NzAE69WK znFisUNIH*|waA;}#*rVcASKSel&xot5-_ib>k!tXc3%uY15uzStF_=7VMn! zXPh7c^04yiD0VM@GNM&kboL!mFk8>536||SD8+slUvc`;miZ&{P$NqD!i6ra#J9BZ zt-4e<2hlU~yWS7Fk!SGTqhfLS%!ql(a`Pn$2imaDd;EAQWVPH|(mybxAVB7HbkOpd zb<^8BdD}a4HNMY@yBLf^BGN4DK6tGhIhNzpj*Wgg5zSbyNo6_VRkD~35g734G+p`pi0;xOpe>F_&%+Bk%S<+)n|S5{V^Rg zhNIdGiX`V&KPI|I{D|VHq{;21BiUPfFjgc*67}~kIk^jq_<9F>IH$J;oyWbzblo;a zK(m@v%0;7B7qOzq#O7VVf2w1(KdV$`_xaS^;K``7PoCQ7QDk^rvbgi8x{E|#_T2%+lOh?20 zWBR|=IKn61S{vK?Lu|;Gpi;Dys~H{7wA~kPTo&v$(#td?9zNdQA6K+2?nfpGO)K_( zAJRS~YRl0P%y-GksyBpG{PwvNhPvd0%nc2c(L{N(CTYjZi+LLKl@W}N)$9XqhxIbL zkJEtxP9qJ{vX8drGb&CdB<)=wEe)y4F?^{VR~Jz8O2NQ_T}FnXkc#fXO*YR6brKR> zI{}K9u;~>TdAJ1V1a2bPMqjtQSJs*zkIbmz!gV105GP0|PJ}>aWMDRYV0^O_->-9A zSJ6b{bCrsoo|2rXCb7G6>n3L|`ZPjF=yq&I1|7=rYvH9{MdL5+9I^PMaW$VBeZxai z7&^^~8TOB5ZkDG#Lx*{#?@6v&KxyHZhLpesx*$>6T51pQN^Lv4gi2CPYUpaem68}U z5XvFZ1_@`atd5Y9yik9ec|@(xGTM?3`TX3|Ge5q( zw_&QnXE*5EkqESckVx?@u9Zy9O1w=l$OX;Lq(%&WDZCX#O3FW!zUaC%Mhrg z6vvBSC1@K&aMyxkH+6SQylE?dII=TN@SFNn%}0xpo1@Zh(`OCGKW_HceKk566GV-q(i z?}$+~q6(er%qhCwqi1-b7S~Qrband!O^4gj59>F!&Z&aeu_FZqS&-f ze!I3Rcj$UbSMhFug;dPccz9C8cV{e-1*Kl(P#!OA{_Tm%aig7yr#l%Grg%>0?y(%+ zY1dJ;Kw~q0K_Q>gUHaQPVev}4v-;omR#2ew%q-T7e}zC3Qtr6?_!0>whmj`)(UE?C zV1|;QBtD)}fK)h)D2RbZqa|fKPVnO5@cl=vS)(7$``cknx0>tv)!lJ*l4pOVL$a-r zmK7wBX*Tu*U(Iv)uC{J{O^yBsdl*D&Ia;3~u0qn6nVI#WZ5$XVx%zd@I*62?p1E6AUVb6MX-gW*GEUeWwhUf&C-yX5=rNs? z@C*1)Rip!k3PRtcFE4jp{1Bf|lu&xu3+1zmO=F7a%Kj>q^`@2UcbPH4#H`kjLUj_uwK<-rqhg=fbRYu_V1={r&sF zD@P>eVgwdV=eAc%m9zZuPZ9x_3l!;gj^N!qa%ci(*nzkC|rsE9IRA6i~53mu}UDQ{QKm zlFFMUg;O*@<7CK35^c&|ANV*LK zSi{Yx8A7|vyzJ)&s?k%h<7~g=K1xp3(#g7Z?HY_5e|F;Y)7!E#GG(W4(}a*RhJFOd z;ZP8rX^*~w^d}meJ1p+7wYAt1;>YndOXsLW5GMMFITjQtY=rXfzWB!0+IO{5^WS>k8NR$;6sv5_mb_*o0G&8xouU;&2cp&A}Wu9jyODmcjCtys|Vc8JH z4wy1vGf38JC84>}nvsEFY;uxVa{ZfQC3jei%{9!@u{DW1_HDJu@6wgQSq^=@JN>$) z!S?6ZHx~=9D#o!#LmbB<=WX=-IxRDW;6wZ~Y>%owkk)YvWANf<)NFLLo|N0P>FX;m zQKhQzZ z*wZPg)7|q+#3^B6s`e)l+4HNb#~!lNT%|_JzkM>;YH51ps7hIlV}G{rlGztyQt;J5 z)gkF;?lK#S}kmWJ^Rrnr$cf&P z*NA*7Dw}J!HK|F_sGFl25+kt8K5bTb=48rI2^%ExufTFEcBPbhon}g{C@sRG9p|#UG(C6^s2<dMazps#;PHiIlHj7s%Zim)~6BxBptmzVhYeMRAAT1c7hZWP;1H6jC~p-fMJcu`;Wf z$h0@Lea=l=%f9iqMA;@tyH^L`#`%Tc?#HeFP=NScf7&WztAr+a3DtC7_tAhx^F7fY9t)%+xcuux)-=P?@WBYEP5SJdoUj&e9`jULuK^YU9u6C(}kh7X4xI?ESe%;*QmrkRQoJGqV9N)6=wZ z75icJi$Pe9=$P>)%Ia&kBO^^-U%7iq?NZuZ#MV-~j$TZA&9EdVU1U%C`$!Y&OJbx= zX@%4T_5DT`l=sIYbrDy>m`~cOxbz4J1SugETmnx>cO;xU{-o&&@(>*f?i1RB7Xtf~ zY|%_1dZpveM1ippLFQcq%A5ZQy-dnUrRoG0+vex=pRHe`$TSY`aeFSfzj)X^TIx4t z2#=4`Q7H_pcRs_*^ji7up*I}wt~10bUgIPa=zrQq!rF2u{oqqV(Eby6m))M9cxre$ z{v%q1myY1{v4a<;BiN+=@py}MgVV=7WNd;DzE7;!9@jXrPtg4y54_d+t+^UXeX3X8 zCC*uejMS%Dz7pX!WpS8P4@-`7MqM?fdKDfX9<}lW**ZFLA~gq@ zR-zb7goLct<5MS!5fe9EUXzi8V4uUMCQy?Sr_LgLM;xMPJ9IQo5r+9f0XaZKM{wz$ z!@vH-ynX7OtN8cFlkTS>obX73gjB`%*6Q@?-ru-GY`kRQ{B$9M@9!Rd^ytyWx7Q)s zimb)h72p-#Uj57=AaH%C_IC7nb!&9kQQx(%c6rG%o_bTLPanX1>gfqxddKBDLhBZs zMh|xi0wVH78WFCVlBK0(Pl5HN6n((wFE196&{u3s9Y+|xFqr)A-v9G^X_3|W!Yn^5 z;STJ~2U5A0>v=piirqDLqmXt-HPS((zHYm zu`=-)S0ErD03~y^HSLK?1lo4=!^4~ld41p@=cjsJ+W-Y_xBW{i~*mb?4_5z${5eDQYV;s_!qu-P) z`>j!yp2 z<>%qHBGw;*LqlnXD||MAMZ{(3X21UY%(^asRyLER_9TSLZ%YZ(iag* zVqD9@W@W_yXP8B8t3=My0Z&39zC6?kEb94eJ$%C-9oe)jEZg(-N0o1ut;^(~n{lIE zC)+ZShs3y~2}zUQ57kAmO9#n{iazYFbDxO)SQlj*l_u>nfrZ9u!X+SMdj*6ecq-eg}iBdb2V%fVx!x~tJvk%25?a|24~7{8!_=F(yEC@ z=T&YkXd107E^-Q~Al1&E<;pP$!9pvDO?KvV?QCzVCwnfAl_aG0SXo)Y=Aw)H(V26s z@3u;=D?^~sX?{}J#TvPz%p#KDDCr@91DX=Sz^gm3Fxn)ZjYa^fF>>fB$V3S$CXKSE zk{Ht$*nqVTXMDz|Wccv9rM)xpkge*yBR5VsuT1wO@&_w=c%&hT;1uwiSI9`-E$a8( zgsp`xul(Wc?d@Hwnjik=lM+>gnl-k(hSGJV6g%xCiE|lh)J`yor0>Bo(+UWeFVPrh z65(FQZ_3n+f9p{y*z%%1ODAkp%>HW*+P(4gk@koTPB z`^ZD)e%qq!-L)S-+K+!q&cIP&0$i=q=NuwEGujkiUtjOoU$Om6&(OZN_=LdP#s+$! zNx1SXt7Eqy*~dijRCzyNHMQ`F^+v)QK&>4%gsrV+P+j*9ag`noINobzn%D-mc^nFb zKpo@as#*$>@t9~$SJu!Vx%xheUAf@~9~H7HtVJrwS{IDw6E9x0Q~TCAj}Q`iH5`1l zylpV7fkl@}-Gn%hQMnG^-#z5AW?X#w6(%Pz|K{iip}2x6P(EN`33G(Y=Fk9;)8zz$ znAOGd-OlShg>IG*YkYK*gP+Gofnh#upj=f_M+ z)O|yYg)FnMB}8k<9!Zulp#s_Iq4W4B^+>u?#DlP_>hG~^X7xE+Xxvzu_zd^eWQhYA z>j)m$`w(X207YY%(mQO7Jp&g-|Bfy+TR-dGp_2qNOPLg(6yb-b41QDO4+?p|#JScpOh$6_ zpa12H_dNc6jeoh;|0`7ZmlOZn;!~5npVqy6=4H50V#wYm0x|T-;XS1*%JkQGeu;(Y zcM-ZNcWUeE?ux`DBzUY$8)r-JrX`(3bN=HNqp~k-J727CZi?G>JO^+H-blu8r>yXd zoT8*nuAP()SQUUPG`7nl{PKa0?x#b8)CcFv4ec~PR0oJT*Q}g54))~Z zq@=U_Ts%DBb#WNJzO|QzKowa7)}P|2oT*Xgkq?rbGL{FBQk@dhS3q}BQM&Lf2qR>@ z*Qg>{Sy}a;on@!z(Rw^GJd8{F;K2h33M<@xK5oqAfDvzvB|7f(Joxgj;lSK27~lnC zFZe#>KW}PkDz`ooLrBS*kV~ZO<|Y=7P3*h1HeXRuasR0Nj*Y5`@;_f05EuzsRULxQ z&@uqAvx&JxxO49hJAxAk@Gy9;%Pu9g(IW)vELA9qmSEs#QNNH$;qyiTGFqOqZ13R^ z6Qfbr+IbR;$e0jmFuM@+@tlEQ2XhMq50ix2^vZ{rd(%G@Eq!>k>gaJKZ`M#@b6`=plXuNq<@r~j4cj%A5d-v|G z!}nX=C}bcap*dARag;^cZR<5g9uH>!N)*JRqrxiZ?J@kGJiF6ss=w0jF0*Kc;SbZ2 zo7SB#&KEg+kCuu>4JT3Cy#EuRwob{ufD_CpXmX03U2!Tc8W{WXTg&c!p2s*jm8V|c zGaQeUAU?RQK5>(QvmmCVtn^%b){%~PHM^*&2;#?=CU35Me4Kd&C%sdWQ~M9V=}a8N z=`XgnzJC6d>7fzq(@HmR2Fb=FuZAB$*|EOC)m&`^I1RYgID=g9WyrxV#n5acmRacb z_Se_ipP{Ijm>|NU$i5hQia+?ck=$cv*2n|!SsSEIF70?ZPhaesVnA@0|20y<1S2#fuGI+>EcxcP% z2DRd;x`APQt6qzkoa-5V|T-hDvgzM+7G z$NVV7XqDhJ<#*PG0jFfj!JaDJw|x1BZ%q}A-HnJiY|SGgaubB8sPIhDh5N@Zyz=n! z^15{k-54a+{8;q3prDpXBjVp9^D=O|EVxXY>zM;o#Ty`z&AeVh)Gj0>1W$_p(jX5p zrs0#*#ELl>>wcvsM~UYYXsJ!~xdIno#dTmv~R=h34_6C$Wez2%)2a0w~s z#HPO$%|gaOBkQxXk6_D20dVNdHFnxh!*oeAJ=nf?V8r)d^0rt7C@LD@$ z&d>|6S)`|@=T+`VbyVJ3e&KO}XYnoQZ4>>KyRbgyo}=`whr^qOd^tEdtG#}H6*a2x zn76DB#K-V31%yTf`Iunq6f>R~_!kIBtEm+U&W`cL%eWP!CnjD5xZIv+G05PNptebb?X8Vfl>=w2}3dgDewq)s&5NWsd_Z!si*1F^dx`f8X8 z#3!|&pNT&yB4UB;czzE33d=J1I;kK5A5+}PlP48jWn^WM<574aj~VXL418j77zsI_ zkD!|AE0>1DRy@m-6H94h@r_mXR@5j^CWo}Afi7Vv8``c~BEs`GeQL3^yv$80X+h~& zHczmgK=h2dudfd_tF(YH1OO{;vwgA=`7z{3%cZ$NWutp{?*cI7mE;}0E{Oiax`2xl zLd9(mV@?kI#6PhIm=n@7H%QE0Um+hU4kDzCJ|Bf=bg9UJCBG(CsaxZ@DV)-%@v80O zMgb;>HwOZHH5}f<3hD+Uced8$jl2yiE zQVSAvyeSc%1A1tT&GIcF{I|=G5I?J?hPntTQlCk{3K=clNj*Un?%eb0QYl-%&wL%D z)$(GCd|0Q;Nt8lc4pxbsS(!(Ex0=6~eer!Ev$8dCffHx2?a(OaaczkY(cGFAl5%op z0%Yhyg+PfX;6u@4h~@mZsj%PyECqf*feM*d2=oW3AW;m`DonY_f`M$FBzq^HJ_Oq# zX;7#bya+_REzQjkA0wBiI;)9Rzel}67Ns46Qy5^i0mwL-kP<<;2A(;MqNCDdo`XwE zE#BDJxGT?mbzyVBSA#IrWhS5?&x)DyheR+2FQ)tvYmQR??7&6V@E9{ zr1bH`AGF*34-OdL+$lTM;!KB~ecYt*s*+M*$Ai2-ebJutduP*E<_Uv(*;E#A&y)Jqbcpi*V-Wn7;!7i%t7D?;UM@aW|2lwa$IRb} z=QZ{}<%CpCMU2l)>>8Q<3<+elX$YC1nU8i0s}q1DEcdX$-d(^2pV%kg+>~`HTpZ0} zDpk7(|8R)FE?TU!KK$MqBfNjVW$b@r2s@G8>z`ko&uO3>ymoKsGquXUUX{1+d#O8c z@u2EU$jV-tYA5>enfl?sX0M?fp^_lwYOAXo6&4m&S?Sl89oX3Rnfl_N)AaY4Errig zOSw!8jE>^JHvyZHYkX4Ye07G4LpbvvW7r2NBcx`?I|GxG#yw}j!5?}as6N>Xz}qMg zJxBHgZ#{e|82(xyhGjGmYhfB|exzUOW^Zn89-WI^iOOn8g1Jnhf^WkyEIn+!ocs6h z$H!lQ=jt8?JV*CyTu;rIh|qZGnwpxH7Roo(jsG6}>htL{DI0aVWr%>aiKq9S`UXb+ zH5aYr&t!JSP7X=@u^#^o&-OOnKQZ4v^*bG!vN8FujRshr|fZDy(I(*nTfDS zlq4h{RxjN84Mjb<$zV-@xd18-#IzR%+0nBvEc7(CU4${QHv&P=5j{*#X9D z21FN7-j7;55eE)n)uEb5c5d!W#UKK37Uy3WuxE?q?an{qL|wNI#y%J}JSGl8mATLM z0iU(GzTWx#T+O350oKPk$qrKQZNJwC7#rd@ioTzSx(-s@zz)Y|aack0(0@5f;XmRz zm88MM7EJmkGZQf;`56u5*ul7d-$-HTj{0BFkztcyRs;ueLrM&kHXHBTAk3RSWoB zSZ?kUwr`xljHoIgqd16gTdT;7D?q#fnlgfpZ)kkH2w6j5DFaj?q-%f^VWy+QyNFLf z5IxeDf4Tnob6&l1h+f@aU-?MFC^S7f>bfwZj=`#5zke@>j0RmlpoG4-QAj@mvJ~X6 z2u5KFLJkOiqsq?wB6o6=Pf}x2E+ITz#H)6q00dj-s zXlV3c%#M}YD*!slNJ)b>PBQ^*fq{s6S-{@{k1OG~v-Q^g8)Q1#i!`ZUy*dGKsRAfH zV8Bg!C3|k?@_%l$uqBX_%4NDmGOw`$cL0t=RQg@GQ6(C zj%7E%>RQr~2Gu2Nx&`uDzEobm`#Y?oBj7`y38Y)vrS=%0A$m;ZUop|BQ&E3auWqM3LH z2#`g~ka%<75`YL05_zwFch`*N#gvEZ9)6T)L;%3hCQ%W*Afa6!zm$A47xWULx}(dsw+U~eIorF3X0U`+FGG)=M-qXGXn!bJJCMT zaY1~*`ue`q2`u6<6I-GZ6x9M#7o{`1-cHt&qWws`6!29S|^9J;u#Q(_p_Ze_S1 zxFtFmiP;`kp-4pnra7+_!X@!&+wO`iorY> z7WbcDfu$a#|MS=X+eeGxURN@{l;H_qj`*jB%dzK|rNH!QXllloJd}Wl4Wd?gU>5=H ztNC~m92kxQ)e7bnG_%xWcrL$>d|=}Ix+@a30q4oz-yh)mEMO6}2OL>CsSKSeRG)yr z^$5YZ{rYPVH9}=YFoa+7^72uHMi3q^f{eypOcgBsYnJT#AX`=Yk%%>%E z92gKQdc|T~%%s_6r&@fxm}4l|@D=2O?`59O;DjL0@Zx?9T@LhzQ9Mgd z5Vm!6bP$j;pK|DBiUi__l$<<73%r&)NQ_39h?&HS786vyv86Xwp_(~BqEqjaLF}I^ z=ieX3VE$3yif?&&Vc1txnaiYJ!`MhN$8E$ZyD!s_?|>q64g_;dQ@Zw)D}kfxE%1)) zIT%|9GG1_J8SWp8w@=5Pj@*mh>5pv#0|6}dzs^5Zx;LZUO=y>ic4NHfGc2 zX8Hz-<{6?}!9M!?V-3oGtj4etjSG;20b!V9Uzxh$BHe*whCcp9PrmxG_^DGa5PMo3 z3T77&h!ltjQ8ZO8OG-#E$~8Jskd%@#^W(>lu`!GkYZNjGPLLk5O6GwX0*=*ZV=^nl z#4IR2e?MX2FFOkv1A7xZVWx#e-tghWt)&TS<75$Q4Iqeso8AE-ocPSc=es&xG;<fKN?VR~HEW;4U+2uFBuLb{wy;y1&1_rUrM1f<no$<19&*d$Ujdx zW5EjwB4XlzO2pmn{L5h-$CSTPg`SRonz$#0G_5}0OO&W>jbZ!#qj?LM^_7K%z{S<& zWgy|~A!Gn*JtaC?sn7UHy~-*x;a{l*WlB1ME_v-r2H4MtAS?*tLxWgXySrSSLC5&r z?#P}l4Vugxi7atj`KLy3h2ucgO-}NqaHysI$DL@EQY4!&eDICWkL{#1fa<>H?{((7P^)y)=tof#5Hr_}6X!`EpxI_akOR zDc&9VzL(*0;CcU;E#b=6;U`|n!64THVWIZ&@sm9b?mtIx;Q_2?W@e`POA}1i1e`04 zzkk1H^#fh@??(?@`yPt@(mO56`Q~wYaV>(1pjPqEH+|d+3B;g3fP3Z@I^lx!SQxq8 z5sV-_IAL|)0H8wVH`yVP43IYfYV}t7`RVCJL&#TIxeI$TL<&lZ&^J$?u5Eb0c^rZg zpif|%1Yp!kNXg*Vj3Xl>gG)0}&JnMsr>8+Fet2RLk}gf(x!mrc3uZrdY#gMQ6e(B! zeDh+bbhsAMcIP2m3x&izVIo7$mAAKI(Rf-KdrLO2Bqd~ovH;rx34o>`gn(2GxX-Ws znHGl1uM_uJieH!^$Yk{uDz1O`iuCI7drJ#zRkfU9$` zZkUt?w^GQZDR^g5jbjvY?M`FaI4DwUofphsUMdx9z|D?&@Bo`0@E8HEGrScl>Cq!~ z{);l?QhPh>Ks?0}`u9BDiP`bT#+~}|QZw#Ct`Sm;DR?wE81G^T5_ogew*zcsGCU3# z_8JI&7PV44^ZtU;I)6U`A}^1Szi(~JyAOS7YQaCbRXbF!4UraXtdFPG*xtJJ4sHh_ zDrAn}uYj(jtryVD#2{>T)(}58nSkYQW1$|%!@aj(J>JlSLM#E9G)7xC&X!#;w1Jh% zf3b#FZ&i$gXUKuT0Cp8us_^#qYQK{Ppflk?8Ht^sLw_wLRj}-Dqr<3Z0L7X6 z26NA*s8BrwFuP}H_m4XDY3@Cf52m_Fc&V6wT)d4|Y3*;#-{v%#Ecxg1y^Hs#FUvhM zd_YtG?;q^j>HoO$|No1>>kYAhyc9xlO{(q2Hf?0a_m92D5jY=Zz97#P?fuhKxutE##NSzciJnV(=xe|#^g zelVmqg9V_Zybr*9B$+=!fQ4m{?hjl0YYh2}&xmHrS5v^sWjz9HDRUk_rmZCZKU`!x z)!w{U9Y0HL;j7z2cKAGkFZrP1N#FB^b(%a>o*S|Rr^Wa7)bI1?rRBNx z(dO5u;L`tdr%jmQoxA-9toVmB{Bw(e$N&Fyig)+N{HM?QA7H?qv(LNnSEi&t+jROt zhrS1yeqjPSM^n>YaC}fhD=hZDzCLIkP(Dh=?n^Et_vSO65WuXBZgiS@Bj!Bu_Q9Sj zDJ};3nlz4-QK*o*gp!(rglt8Hmi?2}Ra%@!Ss z1Cxo#FnRp=Ynmc%DsioyE^M1$@2R=n*Q%u%(i>bg9crVH$5?GtZvQB`- zgv>=5k2$P3on)!esi}8%T|yC}T5pd&xVM*ny0_wgJ5@F^&|6{8zcR`n>i64~1u3?u z?-od)u3v)F0TEFil?xv2?(W`;UEWZ-i2&Io4`3ju6voztz6lv1K!GTdRY2O`a|ER3 zfNi(?pC5Oc$#-p#u%Qkp6aldJpgHlP*#saBjrZ9kz@I8#OyIwewEUwhs2nIngrvVZ z?h&Zvkc@r&mi52i;51VTq{L=w(1YcHS*-e5!h&vns!CZP5Za6jo>3qlVpC=w^3R_? z0|{B`vniJO?4@eP(|A=jv^l`0V zi0T`Fg_a(>9XWUOS9;7_eseQuoiRtkP5d~vY|kik27@N$|6JzQlG+pka^I4Zl8$6| z(oEU4-G7d&umv_g3|NI>Mx3c03%pZ3PlM%u1*yxv~?7i!ti@$K!WgfC$_J{K;g?%qF z!WzPfM;}1l0syaQ zWRw8vR%+_e`!6gC=;E3F3bFQ?BpNy|?Nh>0AGtE$2C z!jUxTIScTh*bqPF&htzj<^Kw!h|Cg>P{|_b+CmXr2XP0NQIE`JCUFN-Sh%n-LiNXx zIz~xMJa`K_h>&5Tag}oboo6d|D?sxe>57EB(Xg-nY%Ul(bxxQJZypZ~GVmL0#a!qs zGIvL2IU?Nyi8Bu@i!(S^Jf#0YFR3vl&gZGs>$_--^A{8HXGr-61^2&^YJU@TBq7!O z8*5}H^%!z2=P;e{<;#0C<6l&v?x#mT%==GK>=TI}tgl<`m0m#DuoNKY>(egrn->ht znwabozl*!Chv^~;5fcjs|9*v-?#{1CsI0hlB;(ROws5Im-V5i`AwM5|ojDI`sXvpY zU~90;*=#Lqu~ZGKOi29Jx^$U#u>E{u>_%8@@qSAO=?Eh%_)wLX<;CTLA40-OGvghW z7n;96{JU`BU&<0DgYdime>QkIfRX;0{`nW@@kepUKWjW-HU4*f>Hs(NM>PpRp%E5f z`maoNOmufon#MwG1Lbv)T@==aAR{)1J{Zqutyv2FH!M1_HlgGu0MnhMxcCsX3~6I? z4bUg8d225ZHSJ=@e~77$4pi#{`?(3KOa{~#v0`eB+MC{8!xr5y%aPl5Sqi{CHX1fi zlxy=3Aa-WaO8xbVqoA^MRgKR34ub7b{EA(RHynSIeG!;v=k%wN6oc(v*u5TDa(<)&StuKr`eYN0|i9ZxKvITr_&k2H(U&tsM`T4Wl zq!x6$%!fxT))z)01vJWprAm8`qVPD6Fe#+v6|$R?EgG|Vzz8i8yHPUtvk%Zq7@1CY)2)W*o-vdg=9erfwn)?USPaHb$~`S z)5F6j9eO1!4Je_>$^5xm>3=jiQH#tgU-=5$b4aJ)#kUD+V}aX zDy429yinKqXuac!a!5+pnqMj+o8 zB#gbn%kzcMLE+)?ApYszk{G7Wn%UNy&_aUZkFF^MjG+*o#I#_F*QzA`ZzYvCZrs2W zuQYCLheB?>j*d=4BgCMBl1VcA<1(&*+6TX#^{jz%?{$%+ZOEKGV+f4w_a`c(1!NB( zi)9-2tde!&fcsTRxjPFX5>z2Vte9e!o5Rt~i9b(PW9sqbDE8Xx$P%hNq} zpw)b@@M+1`zcBK!hYr(B;rX=mtKSW9qAJl;ha`R4GGr#HAMWkr+;O5jE=6=O83pNU zn-(Fxj0Uju=bz~}lxcR|3ob|C0u`+ap0LhfIX}DgMPQWOt z;pX}ReZ0`No>{8muZ|yHlbN9-uCnf{9C>AJx1j2GL262KaZK<>mm_b{Yp6KgFZRS$ zVJftzjmT7wVOX9LjrztS%pan-6NwFKbSS8hkfmK^r!SRB8l)b#SL<1}K9&d-4HbU7 za>nI=8Jo?=T2h5y;bwJ0^^;mPY_NvL#(-`}3t@YuU?EHf?KdJLG^IS|Mu5PD+8NWQ zXHaEwLBCpX5C*k3HA&0)Ison)bRfD}{pIDM1zY~6xxvdIJ_r?&TCYswD~H{S{U-X) z5!XqE40f6Og;=n^R3_+u=X%`8;F$Al-=-Z!GI|^ z@8KOF@8!1UIEhAQ z_SU|C=WbOMo2RI{)`sHC5~!}eK+4Oo-!j6--tzO+&#&~Da#_^oKHTLGsfLiLG#o}l z&B&!5UZnAmA8jLN+m?Nr$@21LiRynHv;m}dwr)C2VJ1-$GVR_TPZg$- zZhk&M5q*=b?l`oR=ni0+JO!nI9<+@nafY|gBb^8YC;^>|<%2tJ(u|;xD!&dwoQz?y-13`8!&?w zlq^!*4!lg8Y-Ch&#`Mfno3rhgQv3{D*X9nX@qGS#l8;cYjAlWNX@PMk7~3H*%{=Su zBOarX7N(WiU2aKFbxg~q75A~`^Xu9cUx`i{CY%fOsDiu)O*XfAL=cX?X0g6Bg^7ae z-z`!k@niY)8B8c=NPcv9o=ZUG884E%;He2ms`Cyk&(Di~6EBfT7SUl`VViNdkrl}- zN^Ogd6%rAdK|^~1UY&>`?Pfh6ZXuF%(EF)WX1jYk^{K)DPz}eLhN_Sk*!WRYtgNIaM0eCAqsr>I@Iw?ofb<;`6Ei$? zrD_gF0zJ9S>oOg5exKAx&Wa4UVOljf1!2*i z(U1c2NZ6w>H)iPXmPDV!2+p0GZ}mr%-QI2z7Dw}+#Ty=qR#Vr|z}|eO^{tL2)>>9j z$rxoJIh`~eW;Ai_-1b9@{8q0=5eyBt9(P?)++O}6uB>#u>s3%Uw-B_WgXG)9ufcTc zs2oF|pV6DyqGuJ$%5$QuZwvsq3u!!k=6!xz+GDGW9|A@MdH8tAcB5iqXsM~8Ua^4o zSV0Iupf$>$rL2v78a>py(Z4HHZ2)Dq*jBFn6}#2;_f(KJ$kbFIF`1^6qlp zsf}MR+tSe7oFpT;0H9_;?1M-p6PDR?&hO1`x#Tb3-%WhTzl_u1>%C=K%t>`WhFfz7 zUzWTJ?`+lfb`CwCo)vV`tnDmWB!sf8PYrA9iH<40MW~BKeNFLs_Me9)OD&K3bfk6! zL|_ShfJT*m8_e zVK@#?5~j4Y^h-9&{@Gb>DJ_s~7{ar3f`!|h{J?gsmKJ+T#mi(-FX1MhE7yI3Pp@3Q zKEOLbX;-adAO3L5+rF%Jo$4DX$mK(bK&c<_xCV3RexhMj7L+I=(H95z|J|~I5#8+J zVfEk1*DFW28u)E{v21Y*v5h}PldswLRlM?wMCyiG?;b-o*Og}c$`1h z#^`7<>|(I@(ny|uXkqH+$j`* zi>iGT47Ob@Yu-}-Dq_p`t^Dd0Wp}`hv|~uKfy$bwDJij?n6CIn?8{6$Iz12^W~Dah7SF_j zNOPyDQT}AsUrNe+qAnMz0vI`wpa86bXrB9dwH88hXh%q{7M*6AReLVcXiEr~+Ko@ULd)GiiGuO3EJc-Ike!ha6JC zEpM|b4UstO9L~I4QB+u?bNdGCXtIqOMyH6N3|BEtaxWrsmUW{kZ1 zC#f`a#?X&krJ(|e2tBKF>T#z^W4|!qS&;pv-TGU-5hHtkX68bWUZT6=2aoJnDHEva zrTU0!60q}#|>)KzK$NqAVcn>?+Ii@N6Z*hbfzs(xIcP8!lVTd#%k)OG{3Yh~!XIlB^B8jF=RA z{_5?J-n(0q;6|>$JO@`!9W73Up4WIfK(VkeP%68D$+e*9z6SggE<#9~dpd%^28^lV zVDRi>Ysf`N^P%(9R&l~5>rCI_A0B7&?|TqbBi1a2QSMb&P^|Y%V}^<8KzxDLQM8eU z(!jw%C73n>?DmIuoc2WhWdeY}iopw8ntNQks^54N)#og3Ms}i3FV|22^H@|Q`IyP7 zRm-C4n;G+|XV9Rh{>0aJU9z@JvpxwYn-2JH+GLbG*12%P2}TlkEPdsc19N+P+m6;A z*SoECwL9CDVr;ks4}qez)8$m3)*^mTPuT^dwTiLso7OY=f)vWWpB~XIeZGSrxo@g6Dk7WP<4Q z#^!Ykwkl??4!6-kPqjXp;v=k0_Igmr;ru*4^Ygx!4=yNKx@ z7;PwZKYDWQ{>QC+R#W2ftT9&NWMk(wU6_|U1!}jyGC$7baND*)q@W--7kD_u!{rGG z7B{t)n)%Ny%JZ64 z$}q(MZgh9uj5&XF8yAkkePgU( z)>9%nuad2-e0Hc}C1hm)dl4XWFwYE|Y;KoA8nglg0DUVla}z3+YG&pdwqO=4XDT5V zYi!53MuF+zP!K6#+b(;J;{p8OI+{QQWxEq2bTLXF82z&DX^}!kN2p_Zu?@$gLns6DkA~2@tDzvV Y*bL5Y=DC;fF99F8IJrAs-oQxt6)X+)_5c6? literal 20454 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 ND9EYG7D<}~|1XaWWPbnv diff --git a/docs/sequence-diagrams/puml/offchain-purchase.puml b/docs/sequence-diagrams/puml/offchain-purchase.puml index 64a3bce..f05ebb3 100644 --- a/docs/sequence-diagrams/puml/offchain-purchase.puml +++ b/docs/sequence-diagrams/puml/offchain-purchase.puml @@ -7,6 +7,7 @@ participant "d3.app" as d3 participant "Registrar" participant "Registry" participant "Resolver" +boundary "Events" == Offchain purchase == @@ -21,6 +22,7 @@ activate Registrar Registrar -> Registry: mint() activate Registry Registry -> Registry: mint token +Registry -> "Events": Mint event Registry -> Registrar deactivate Registry Registrar -> d3 diff --git a/docs/sequence-diagrams/puml/offchain-renewal.png b/docs/sequence-diagrams/puml/offchain-renewal.png index f9183e406a728d45470fcad8cefc46bd40d1744f..1f4b46661fb189f6bec8ad964358d2600eefd663 100644 GIT binary patch literal 24941 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 R0`=JaH`A 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 Y1QiNnQ?nj|c?q#Fw>|&b%;Vv|0fQd)ivR!s literal 21651 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 CF+-#P diff --git a/docs/sequence-diagrams/puml/offchain-renewal.puml b/docs/sequence-diagrams/puml/offchain-renewal.puml index c651942..c9be87e 100644 --- a/docs/sequence-diagrams/puml/offchain-renewal.puml +++ b/docs/sequence-diagrams/puml/offchain-renewal.puml @@ -6,7 +6,7 @@ actor User participant "d3.app" as d3 participant "Registrar" participant "Registry" -participant "Resolver" +boundary "Events" == Offchain renewal == @@ -21,6 +21,7 @@ activate Registrar Registrar -> Registry: set_token_metadata() activate Registry Registry -> Registry: update metadata +Registry -> "Events": MetadataUpdated event Registry -> Registrar deactivate Registry Registrar -> d3 diff --git a/docs/sequence-diagrams/puml/onchain-purchase.png b/docs/sequence-diagrams/puml/onchain-purchase.png index dc5d0cccbd8780200437fa0594a07c1a7913c8d3..a1973b7978e3fe87b1425e67dd3acef49bb5ed54 100644 GIT binary patch literal 27208 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 literal 21071 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 diff --git a/docs/sequence-diagrams/puml/onchain-purchase.puml b/docs/sequence-diagrams/puml/onchain-purchase.puml index f913c20..f36704e 100644 --- a/docs/sequence-diagrams/puml/onchain-purchase.puml +++ b/docs/sequence-diagrams/puml/onchain-purchase.puml @@ -7,17 +7,20 @@ participant "Controller" participant "Registrar" participant "Registry" participant "Resolver" +boundary "Events" == Onchain purchase == User -> Controller: Buy activate Controller Controller -> Controller: Process CSPR payment +Controller -> "Events": Payment event Controller -> Registrar: Register activate Registrar Registrar -> Registry: mint() activate Registry Registry -> Registry: mint token +Registry -> "Events": Mint event Registry -> Registrar deactivate Registry Registrar -> Controller diff --git a/docs/sequence-diagrams/puml/onchain-renewal.png b/docs/sequence-diagrams/puml/onchain-renewal.png index 4adab0d11030ba3c96d80eeb67e0ea99412a9e57..198ba933cfde439cd4beaed33d77fe32e31fbb3a 100644 GIT binary patch literal 28359 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 T?$`|J+g%#hbXAI!Z65s_AdLj! literal 22945 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

r1xX{_fAa-e|f$_C{}l-)34IpGhHR z_+IvM2u*II2*aYe z%a`SD6>h(`HkXn*oig5)iIAda;cH{xnsK(tPTJ)45MI|`gf4uUvF8-@ibHdQE*jsi zCJ}KBxz^Uy)bv2^02DUJ9e*4f-@0P1z;LA(UzJe>_vVGzTz(BL366OG-_0y>+TppL zsklDfc^dk3pd;7Y`*$ zw_$y8M{2danwDK=bv4T#%4i%LqDmQf-m(@%1XxO%o;+qm;f7J#KL9gyu4c~m7eyCb zU9>5(Bu`Kd4p_vr?KG*cnijh$Gc4b4iYNlC)>vl}OM6oDxfKj=fj-syPj7A|-Q0O? z-c?bdIejG2Wz)|Pwc1G3ocsU3*(Lb>o21K578jj2XF&@sQLDNU&UPU%tS59DV~r@C zo**kWQMN4KT6J2T7oi~w(p#GJj=&4$Xo;9X=KHLckQ+icMK9DXTeKw{ zm=!i`@Y33wyYpo;QK7gyO*PqiDmVEiBKCTV%!9C&F~vW&v_mE>_o`dTuqS7~Bdch( z<;v>crrtyS*1>D`8?Q})gc=>5NPj0p_=0u^yx_^>e5K0zz&EY6Qt zr+hd#kF;G2j%Lk7nu>Q!w>1O|1^i(V&MzHTz(d{*A99Pn#(kRGG2p%>20fLmm)Om+ zJJ6$UzIRb5bugh;S?QdX@22dJ7gz7eR+{g&)OzsRHNNfno$bJ^fxZMw7@73k_kKN3 zZ}_^_;)V2`ek=Ba2M^K++H>g4XT28LiSGCeE~ZsMl zXM_|iNUwy^e~dF>1Cn$pz+)OpmOR~lOly%{tcMl|(vut*n9rAT6UN#&T!b-XW9AoP z|1TJ1;xZqesq4Dld4N!@MK{Q8ESSb8gl~6rR5g41ftJWbqbLWq;lb6g;EoN;%M|3 zoAWzWFYN+cA>FD69V31`=KU<;tLbj&@kRkNjmP=w*4887e)0qt>k9`R{qMJ-qf51% z`!}PR(7V%Il0S5T2XQ zVj1(ER*)NOGK@)#4kDqt^2U5XZH2;zj#?OVZeXdc{;C8b(=bUVJ$nTj z(j}ox;bz3Ul&qBntan~KPzV&UJ zjtXjCrq}Y>4aPV>u)is5`224}FLp;=hB~=o$6Wqi_&;L_xT-Z?!l-$B-v907g*3)3 zza(!M&zUV8f}M2Ojdk>XNSb5mCog|gTr8Nyw7q)L6zy*K7~wc)gNP8>nG&^0NwPHJ zl$3n^G9)BRIBul9Es+@tH#2_?NKBO3NnIYWd@JKcntU^i>yHtO)$B0)#gl|ORv1q# zj$cK&DDNb=L+-P8Fwc(ad6N3uN%=gNIl;$q2RoCZ?7>Nr5Sn9FJ;gRo+7Y?cW=L^A zD$Y9}698p1vfnhL;+e$I8pDLpS7Bk&wkZX536{Hd3CmbeUut9*8dNpZ?yu?16H&wn z9}ZS15@W_rEge34I|;!7!3Yn`s)Kf9yQ#L|KL?hUA*3f=yAHvXIfQ?WIsGw%^Y0ee zA5$|=e6NS%@taFeKZykfG!!GIeb(Zh-kiH|L=I3H%_1#v|J&B#yIpaz1%J=YV1(eq- zd2WBz(S*-P%AHX#$>B?u&ie#8aMUb7`{DGE25wnGH4~)4d_q&gD5I>6+MnpKNUHD$b3ny^)V?-Q(D) zs*m+5*rD^~b{%DEUbaDUR}l6??A+8bXnMNaMQWoc&=HmkJ(4&_h|cZK6nRJd-$;Dj ZjfY;IGNS)uJ^TVkN=*Jnmgw!r{|BGw3jzQD diff --git a/docs/sequence-diagrams/puml/onchain-renewal.puml b/docs/sequence-diagrams/puml/onchain-renewal.puml index 3807c37..91ded54 100644 --- a/docs/sequence-diagrams/puml/onchain-renewal.puml +++ b/docs/sequence-diagrams/puml/onchain-renewal.puml @@ -6,18 +6,20 @@ actor Owner participant "Controller" participant "Registrar" participant "Registry" -participant "Resolver" +boundary "Events" == Onchain renewal == Owner -> Controller: Renew activate Controller Controller -> Controller: Process CSPR payment +Controller -> "Events": Payment event Controller -> Registrar: Renew activate Registrar Registrar -> Registry: set_token_metadata() activate Registry Registry -> Registry: update metadata +Registry -> "Events": MetadataUpdated event Registry -> Registrar deactivate Registry Registrar -> Controller diff --git a/docs/sequence-diagrams/puml/set-resolver.png b/docs/sequence-diagrams/puml/set-resolver.png index 3addb1628404640a13da503dfdd71dc7355d29d4..e344288ac7d5f62fee9ce81184d326f869d5bc96 100644 GIT binary patch literal 18222 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 W=4U*m`{2bjH)JFgB)*F2`}{xrGcwu$ literal 14362 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 Registry: set_token_metadata() activate Registry +Registry -> "Events": MetadataUpdated event Registry -> Controller deactivate Registry Controller -> User diff --git a/docs/sequence-diagrams/puml/transfer-domain.png b/docs/sequence-diagrams/puml/transfer-domain.png index 3c76c52989ca343aae0ebdd71e611eb7c9a714b4..a03617526b869d595639ca8a3142cf95a0520dbf 100644 GIT binary patch literal 31661 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 KDzDC%`~43mgT<8q literal 24585 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 diff --git a/docs/sequence-diagrams/puml/transfer-domain.puml b/docs/sequence-diagrams/puml/transfer-domain.puml index af4cf5c..98e1a17 100644 --- a/docs/sequence-diagrams/puml/transfer-domain.puml +++ b/docs/sequence-diagrams/puml/transfer-domain.puml @@ -5,6 +5,7 @@ actor Owner actor Operator participant "Registry" +boundary "Events" == Transfer token == @@ -13,6 +14,7 @@ activate Registry Registry -> Registry: Clear resolver Registry -> Registry: Clear operator Registry -> Registry : Set new owner +Registry -> "Events": Transfer event Registry -> Owner deactivate Registry @@ -23,6 +25,7 @@ activate Registry Registry -> Registry: Clear resolver Registry -> Registry: Clear operator Registry -> Registry : Set new owner +Registry -> "Events": Transfer event Registry -> Operator deactivate Registry diff --git a/docs/sequence-diagrams/puml/whitelist-registrar.png b/docs/sequence-diagrams/puml/whitelist-registrar.png index 27b1de86562fc1c94c0f16905de82e6a66c2d78e..b21c993093f76887c92916138cd0e6ba41154680 100644 GIT binary patch literal 13188 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 diff --git a/docs/sequence-diagrams/puml/whitelist-registrar.puml b/docs/sequence-diagrams/puml/whitelist-registrar.puml index 20a6d77..a67d729 100644 --- a/docs/sequence-diagrams/puml/whitelist-registrar.puml +++ b/docs/sequence-diagrams/puml/whitelist-registrar.puml @@ -4,11 +4,13 @@ 'autonumber actor Admin participant "Registry" +boundary "Events" == Whitelist registrar contract == Admin -> "Registry": set_variables() activate "Registry" +Registry -> "Events": VariablesSet event "Registry" -> Admin deactivate "Registry" From 642a48e8aa1035daaf751e82ae7894e1a1496b00 Mon Sep 17 00:00:00 2001 From: David Hernando Date: Mon, 27 May 2024 14:16:29 +0200 Subject: [PATCH 005/172] highlight off-chain system with lightblue color. --- docs/sequence-diagrams/Register a domain.md | 2 ++ docs/sequence-diagrams/Renew a domain.md | 2 ++ .../puml/offchain-purchase.png | Bin 24731 -> 25237 bytes .../puml/offchain-purchase.puml | 2 +- .../puml/offchain-renewal.png | Bin 24941 -> 25356 bytes .../puml/offchain-renewal.puml | 2 +- 6 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/sequence-diagrams/Register a domain.md b/docs/sequence-diagrams/Register a domain.md index 11416b0..d04d0d0 100644 --- a/docs/sequence-diagrams/Register a domain.md +++ b/docs/sequence-diagrams/Register a domain.md @@ -4,6 +4,8 @@ ![](puml/offchain-purchase.png) +NOTE: lightblue color indicates off-chain system + ## On-chain purchase ![](puml/onchain-purchase.png) diff --git a/docs/sequence-diagrams/Renew a domain.md b/docs/sequence-diagrams/Renew a domain.md index 1711ae3..c3a6a73 100644 --- a/docs/sequence-diagrams/Renew a domain.md +++ b/docs/sequence-diagrams/Renew a domain.md @@ -4,6 +4,8 @@ ![](puml/offchain-renewal.png) +NOTE: lightblue color indicates off-chain system + ## On-chain renewal ![](puml/onchain-renewal.png) diff --git a/docs/sequence-diagrams/puml/offchain-purchase.png b/docs/sequence-diagrams/puml/offchain-purchase.png index 0e24a423a81a03e3cd1875e490fb4831124b53d1..f8816f957c974981363c407ae310162d8dddd426 100644 GIT binary patch literal 25237 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 `01_USo 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 literal 24731 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%0A$m;ZUop|BQ&E3auWqM3LH z2#`g~ka%<75`YL05_zwFch`*N#gvEZ9)6T)L;%3hCQ%W*Afa6!zm$A47xWULx}(dsw+U~eIorF3X0U`+FGG)=M-qXGXn!bJJCMT zaY1~*`ue`q2`u6<6I-GZ6x9M#7o{`1-cHt&qWws`6!29S|^9J;u#Q(_p_Ze_S1 zxFtFmiP;`kp-4pnra7+_!X@!&+wO`iorY> z7WbcDfu$a#|MS=X+eeGxURN@{l;H_qj`*jB%dzK|rNH!QXllloJd}Wl4Wd?gU>5=H ztNC~m92kxQ)e7bnG_%xWcrL$>d|=}Ix+@a30q4oz-yh)mEMO6}2OL>CsSKSeRG)yr z^$5YZ{rYPVH9}=YFoa+7^72uHMi3q^f{eypOcgBsYnJT#AX`=Yk%%>%E z92gKQdc|T~%%s_6r&@fxm}4l|@D=2O?`59O;DjL0@Zx?9T@LhzQ9Mgd z5Vm!6bP$j;pK|DBiUi__l$<<73%r&)NQ_39h?&HS786vyv86Xwp_(~BqEqjaLF}I^ z=ieX3VE$3yif?&&Vc1txnaiYJ!`MhN$8E$ZyD!s_?|>q64g_;dQ@Zw)D}kfxE%1)) zIT%|9GG1_J8SWp8w@=5Pj@*mh>5pv#0|6}dzs^5Zx;LZUO=y>ic4NHfGc2 zX8Hz-<{6?}!9M!?V-3oGtj4etjSG;20b!V9Uzxh$BHe*whCcp9PrmxG_^DGa5PMo3 z3T77&h!ltjQ8ZO8OG-#E$~8Jskd%@#^W(>lu`!GkYZNjGPLLk5O6GwX0*=*ZV=^nl z#4IR2e?MX2FFOkv1A7xZVWx#e-tghWt)&TS<75$Q4Iqeso8AE-ocPSc=es&xG;<fKN?VR~HEW;4U+2uFBuLb{wy;y1&1_rUrM1f<no$<19&*d$Ujdx zW5EjwB4XlzO2pmn{L5h-$CSTPg`SRonz$#0G_5}0OO&W>jbZ!#qj?LM^_7K%z{S<& zWgy|~A!Gn*JtaC?sn7UHy~-*x;a{l*WlB1ME_v-r2H4MtAS?*tLxWgXySrSSLC5&r z?#P}l4Vugxi7atj`KLy3h2ucgO-}NqaHysI$DL@EQY4!&eDICWkL{#1fa<>H?{((7P^)y)=tof#5Hr_}6X!`EpxI_akOR zDc&9VzL(*0;CcU;E#b=6;U`|n!64THVWIZ&@sm9b?mtIx;Q_2?W@e`POA}1i1e`04 zzkk1H^#fh@??(?@`yPt@(mO56`Q~wYaV>(1pjPqEH+|d+3B;g3fP3Z@I^lx!SQxq8 z5sV-_IAL|)0H8wVH`yVP43IYfYV}t7`RVCJL&#TIxeI$TL<&lZ&^J$?u5Eb0c^rZg zpif|%1Yp!kNXg*Vj3Xl>gG)0}&JnMsr>8+Fet2RLk}gf(x!mrc3uZrdY#gMQ6e(B! zeDh+bbhsAMcIP2m3x&izVIo7$mAAKI(Rf-KdrLO2Bqd~ovH;rx34o>`gn(2GxX-Ws znHGl1uM_uJieH!^$Yk{uDz1O`iuCI7drJ#zRkfU9$` zZkUt?w^GQZDR^g5jbjvY?M`FaI4DwUofphsUMdx9z|D?&@Bo`0@E8HEGrScl>Cq!~ z{);l?QhPh>Ks?0}`u9BDiP`bT#+~}|QZw#Ct`Sm;DR?wE81G^T5_ogew*zcsGCU3# z_8JI&7PV44^ZtU;I)6U`A}^1Szi(~JyAOS7YQaCbRXbF!4UraXtdFPG*xtJJ4sHh_ zDrAn}uYj(jtryVD#2{>T)(}58nSkYQW1$|%!@aj(J>JlSLM#E9G)7xC&X!#;w1Jh% zf3b#FZ&i$gXUKuT0Cp8us_^#qYQK{Ppflk?8Ht^sLw_wLRj}-Dqr<3Z0L7X6 z26NA*s8BrwFuP}H_m4XDY3@Cf52m_Fc&V6wT)d4|Y3*;#-{v%#Ecxg1y^Hs#FUvhM zd_YtG?;q^j>HoO$|No1>>kYAhyc9xlO{(q2Hf?0a_m92D5jY=Zz97#P?fuhKxutE##NSzciJnV(=xe|#^g zelVmqg9V_Zybr*9B$+=!fQ4m{?hjl0YYh2}&xmHrS5v^sWjz9HDRUk_rmZCZKU`!x z)!w{U9Y0HL;j7z2cKAGkFZrP1N#FB^b(%a>o*S|Rr^Wa7)bI1?rRBNx z(dO5u;L`tdr%jmQoxA-9toVmB{Bw(e$N&Fyig)+N{HM?QA7H?qv(LNnSEi&t+jROt zhrS1yeqjPSM^n>YaC}fhD=hZDzCLIkP(Dh=?n^Et_vSO65WuXBZgiS@Bj!Bu_Q9Sj zDJ};3nlz4-QK*o*gp!(rglt8Hmi?2}Ra%@!Ss z1Cxo#FnRp=Ynmc%DsioyE^M1$@2R=n*Q%u%(i>bg9crVH$5?GtZvQB`- zgv>=5k2$P3on)!esi}8%T|yC}T5pd&xVM*ny0_wgJ5@F^&|6{8zcR`n>i64~1u3?u z?-od)u3v)F0TEFil?xv2?(W`;UEWZ-i2&Io4`3ju6voztz6lv1K!GTdRY2O`a|ER3 zfNi(?pC5Oc$#-p#u%Qkp6aldJpgHlP*#saBjrZ9kz@I8#OyIwewEUwhs2nIngrvVZ z?h&Zvkc@r&mi52i;51VTq{L=w(1YcHS*-e5!h&vns!CZP5Za6jo>3qlVpC=w^3R_? z0|{B`vniJO?4@eP(|A=jv^l`0V zi0T`Fg_a(>9XWUOS9;7_eseQuoiRtkP5d~vY|kik27@N$|6JzQlG+pka^I4Zl8$6| z(oEU4-G7d&umv_g3|NI>Mx3c03%pZ3PlM%u1*yxv~?7i!ti@$K!WgfC$_J{K;g?%qF z!WzPfM;}1l0syaQ zWRw8vR%+_e`!6gC=;E3F3bFQ?BpNy|?Nh>0AGtE$2C z!jUxTIScTh*bqPF&htzj<^Kw!h|Cg>P{|_b+CmXr2XP0NQIE`JCUFN-Sh%n-LiNXx zIz~xMJa`K_h>&5Tag}oboo6d|D?sxe>57EB(Xg-nY%Ul(bxxQJZypZ~GVmL0#a!qs zGIvL2IU?Nyi8Bu@i!(S^Jf#0YFR3vl&gZGs>$_--^A{8HXGr-61^2&^YJU@TBq7!O z8*5}H^%!z2=P;e{<;#0C<6l&v?x#mT%==GK>=TI}tgl<`m0m#DuoNKY>(egrn->ht znwabozl*!Chv^~;5fcjs|9*v-?#{1CsI0hlB;(ROws5Im-V5i`AwM5|ojDI`sXvpY zU~90;*=#Lqu~ZGKOi29Jx^$U#u>E{u>_%8@@qSAO=?Eh%_)wLX<;CTLA40-OGvghW z7n;96{JU`BU&<0DgYdime>QkIfRX;0{`nW@@kepUKWjW-HU4*f>Hs(NM>PpRp%E5f z`maoNOmufon#MwG1Lbv)T@==aAR{)1J{Zqutyv2FH!M1_HlgGu0MnhMxcCsX3~6I? z4bUg8d225ZHSJ=@e~77$4pi#{`?(3KOa{~#v0`eB+MC{8!xr5y%aPl5Sqi{CHX1fi zlxy=3Aa-WaO8xbVqoA^MRgKR34ub7b{EA(RHynSIeG!;v=k%wN6oc(v*u5TDa(<)&StuKr`eYN0|i9ZxKvITr_&k2H(U&tsM`T4Wl zq!x6$%!fxT))z)01vJWprAm8`qVPD6Fe#+v6|$R?EgG|Vzz8i8yHPUtvk%Zq7@1CY)2)W*o-vdg=9erfwn)?USPaHb$~`S z)5F6j9eO1!4Je_>$^5xm>3=jiQH#tgU-=5$b4aJ)#kUD+V}aX zDy429yinKqXuac!a!5+pnqMj+o8 zB#gbn%kzcMLE+)?ApYszk{G7Wn%UNy&_aUZkFF^MjG+*o#I#_F*QzA`ZzYvCZrs2W zuQYCLheB?>j*d=4BgCMBl1VcA<1(&*+6TX#^{jz%?{$%+ZOEKGV+f4w_a`c(1!NB( zi)9-2tde!&fcsTRxjPFX5>z2Vte9e!o5Rt~i9b(PW9sqbDE8Xx$P%hNq} zpw)b@@M+1`zcBK!hYr(B;rX=mtKSW9qAJl;ha`R4GGr#HAMWkr+;O5jE=6=O83pNU zn-(Fxj0Uju=bz~}lxcR|3ob|C0u`+ap0LhfIX}DgMPQWOt z;pX}ReZ0`No>{8muZ|yHlbN9-uCnf{9C>AJx1j2GL262KaZK<>mm_b{Yp6KgFZRS$ zVJftzjmT7wVOX9LjrztS%pan-6NwFKbSS8hkfmK^r!SRB8l)b#SL<1}K9&d-4HbU7 za>nI=8Jo?=T2h5y;bwJ0^^;mPY_NvL#(-`}3t@YuU?EHf?KdJLG^IS|Mu5PD+8NWQ zXHaEwLBCpX5C*k3HA&0)Ison)bRfD}{pIDM1zY~6xxvdIJ_r?&TCYswD~H{S{U-X) z5!XqE40f6Og;=n^R3_+u=X%`8;F$Al-=-Z!GI|^ z@8KOF@8!1UIEhAQ z_SU|C=WbOMo2RI{)`sHC5~!}eK+4Oo-!j6--tzO+&#&~Da#_^oKHTLGsfLiLG#o}l z&B&!5UZnAmA8jLN+m?Nr$@21LiRynHv;m}dwr)C2VJ1-$GVR_TPZg$- zZhk&M5q*=b?l`oR=ni0+JO!nI9<+@nafY|gBb^8YC;^>|<%2tJ(u|;xD!&dwoQz?y-13`8!&?w zlq^!*4!lg8Y-Ch&#`Mfno3rhgQv3{D*X9nX@qGS#l8;cYjAlWNX@PMk7~3H*%{=Su zBOarX7N(WiU2aKFbxg~q75A~`^Xu9cUx`i{CY%fOsDiu)O*XfAL=cX?X0g6Bg^7ae z-z`!k@niY)8B8c=NPcv9o=ZUG884E%;He2ms`Cyk&(Di~6EBfT7SUl`VViNdkrl}- zN^Ogd6%rAdK|^~1UY&>`?Pfh6ZXuF%(EF)WX1jYk^{K)DPz}eLhN_Sk*!WRYtgNIaM0eCAqsr>I@Iw?ofb<;`6Ei$? zrD_gF0zJ9S>oOg5exKAx&Wa4UVOljf1!2*i z(U1c2NZ6w>H)iPXmPDV!2+p0GZ}mr%-QI2z7Dw}+#Ty=qR#Vr|z}|eO^{tL2)>>9j z$rxoJIh`~eW;Ai_-1b9@{8q0=5eyBt9(P?)++O}6uB>#u>s3%Uw-B_WgXG)9ufcTc zs2oF|pV6DyqGuJ$%5$QuZwvsq3u!!k=6!xz+GDGW9|A@MdH8tAcB5iqXsM~8Ua^4o zSV0Iupf$>$rL2v78a>py(Z4HHZ2)Dq*jBFn6}#2;_f(KJ$kbFIF`1^6qlp zsf}MR+tSe7oFpT;0H9_;?1M-p6PDR?&hO1`x#Tb3-%WhTzl_u1>%C=K%t>`WhFfz7 zUzWTJ?`+lfb`CwCo)vV`tnDmWB!sf8PYrA9iH<40MW~BKeNFLs_Me9)OD&K3bfk6! zL|_ShfJT*m8_e zVK@#?5~j4Y^h-9&{@Gb>DJ_s~7{ar3f`!|h{J?gsmKJ+T#mi(-FX1MhE7yI3Pp@3Q zKEOLbX;-adAO3L5+rF%Jo$4DX$mK(bK&c<_xCV3RexhMj7L+I=(H95z|J|~I5#8+J zVfEk1*DFW28u)E{v21Y*v5h}PldswLRlM?wMCyiG?;b-o*Og}c$`1h z#^`7<>|(I@(ny|uXkqH+$j`* zi>iGT47Ob@Yu-}-Dq_p`t^Dd0Wp}`hv|~uKfy$bwDJij?n6CIn?8{6$Iz12^W~Dah7SF_j zNOPyDQT}AsUrNe+qAnMz0vI`wpa86bXrB9dwH88hXh%q{7M*6AReLVcXiEr~+Ko@ULd)GiiGuO3EJc-Ike!ha6JC zEpM|b4UstO9L~I4QB+u?bNdGCXtIqOMyH6N3|BEtaxWrsmUW{kZ1 zC#f`a#?X&krJ(|e2tBKF>T#z^W4|!qS&;pv-TGU-5hHtkX68bWUZT6=2aoJnDHEva zrTU0!60q}#|>)KzK$NqAVcn>?+Ii@N6Z*hbfzs(xIcP8!lVTd#%k)OG{3Yh~!XIlB^B8jF=RA z{_5?J-n(0q;6|>$JO@`!9W73Up4WIfK(VkeP%68D$+e*9z6SggE<#9~dpd%^28^lV zVDRi>Ysf`N^P%(9R&l~5>rCI_A0B7&?|TqbBi1a2QSMb&P^|Y%V}^<8KzxDLQM8eU z(!jw%C73n>?DmIuoc2WhWdeY}iopw8ntNQks^54N)#og3Ms}i3FV|22^H@|Q`IyP7 zRm-C4n;G+|XV9Rh{>0aJU9z@JvpxwYn-2JH+GLbG*12%P2}TlkEPdsc19N+P+m6;A z*SoECwL9CDVr;ks4}qez)8$m3)*^mTPuT^dwTiLso7OY=f)vWWpB~XIeZGSrxo@g6Dk7WP<4Q z#^!Ykwkl??4!6-kPqjXp;v=k0_Igmr;ru*4^Ygx!4=yNKx@ z7;PwZKYDWQ{>QC+R#W2ftT9&NWMk(wU6_|U1!}jyGC$7baND*)q@W--7kD_u!{rGG z7B{t)n)%Ny%JZ64 z$}q(MZgh9uj5&XF8yAkkePgU( z)>9%nuad2-e0Hc}C1hm)dl4XWFwYE|Y;KoA8nglg0DUVla}z3+YG&pdwqO=4XDT5V zYi!53MuF+zP!K6#+b(;J;{p8OI+{QQWxEq2bTLXF82z&DX^}!kN2p_Zu?@$gLns6DkA~2@tDzvV Y*bL5Y=DC;fF99F8IJrAs-oQxt6)X+)_5c6? diff --git a/docs/sequence-diagrams/puml/offchain-purchase.puml b/docs/sequence-diagrams/puml/offchain-purchase.puml index f05ebb3..d735a56 100644 --- a/docs/sequence-diagrams/puml/offchain-purchase.puml +++ b/docs/sequence-diagrams/puml/offchain-purchase.puml @@ -3,7 +3,7 @@ 'autonumber actor User -participant "d3.app" as d3 +participant "d3.app" as d3 #lightblue participant "Registrar" participant "Registry" participant "Resolver" diff --git a/docs/sequence-diagrams/puml/offchain-renewal.png b/docs/sequence-diagrams/puml/offchain-renewal.png index 1f4b46661fb189f6bec8ad964358d2600eefd663..97b3742c9f120c12214a6c04d39ae65555e3fd73 100644 GIT binary patch literal 25356 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 LoK8NrK9}%6fv_AV literal 24941 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 R0`=JaH`A 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 Y1QiNnQ?nj|c?q#Fw>|&b%;Vv|0fQd)ivR!s diff --git a/docs/sequence-diagrams/puml/offchain-renewal.puml b/docs/sequence-diagrams/puml/offchain-renewal.puml index c9be87e..e270514 100644 --- a/docs/sequence-diagrams/puml/offchain-renewal.puml +++ b/docs/sequence-diagrams/puml/offchain-renewal.puml @@ -3,7 +3,7 @@ 'autonumber actor User -participant "d3.app" as d3 +participant "d3.app" as d3 #lightblue participant "Registrar" participant "Registry" boundary "Events" From fa0f28ba8e5700a775ea6632aa3656e527f64406 Mon Sep 17 00:00:00 2001 From: David Hernando Date: Wed, 29 May 2024 17:29:33 +0200 Subject: [PATCH 006/172] Handling Ihor's feedback (WIP) --- docs/sequence-diagrams/Admin functions.md | 5 +++ docs/sequence-diagrams/Manage a domain.md | 17 -------- docs/sequence-diagrams/README.md | 4 +- docs/sequence-diagrams/Register a domain.md | 12 +++-- docs/sequence-diagrams/Resolution.md | 41 +++++++++++++++++- docs/sequence-diagrams/Second-sale market.md | 13 ++++++ .../puml/approve-for-all.png | Bin 0 -> 27590 bytes .../puml/approve-for-all.puml | 27 ++++++++++++ .../puml/approve-revoke-operator.png | Bin 21387 -> 21737 bytes .../puml/approve-revoke-operator.puml | 4 +- .../puml/offchain-purchase.png | Bin 25237 -> 30813 bytes .../puml/offchain-purchase.puml | 7 +-- .../puml/onchain-name-resolution-wrapped.png | Bin 0 -> 29634 bytes .../puml/onchain-name-resolution-wrapped.puml | 31 +++++++++++++ .../puml/onchain-name-resolution.png | Bin 0 -> 18977 bytes .../puml/onchain-name-resolution.puml | 24 ++++++++++ .../puml/onchain-purchase.png | Bin 27208 -> 44643 bytes .../puml/onchain-purchase.puml | 11 +++-- docs/sequence-diagrams/puml/resolve-name.png | Bin 13492 -> 34564 bytes docs/sequence-diagrams/puml/resolve-name.puml | 27 ++++++++---- .../puml/set-account-address-record.png | Bin 0 -> 25510 bytes .../puml/set-account-address-record.puml | 25 +++++++++++ docs/sequence-diagrams/puml/set-resolver.png | Bin 18222 -> 19973 bytes docs/sequence-diagrams/puml/set-resolver.puml | 6 +-- 24 files changed, 211 insertions(+), 43 deletions(-) delete mode 100644 docs/sequence-diagrams/Manage a domain.md create mode 100644 docs/sequence-diagrams/Second-sale market.md create mode 100644 docs/sequence-diagrams/puml/approve-for-all.png create mode 100644 docs/sequence-diagrams/puml/approve-for-all.puml create mode 100644 docs/sequence-diagrams/puml/onchain-name-resolution-wrapped.png create mode 100644 docs/sequence-diagrams/puml/onchain-name-resolution-wrapped.puml create mode 100644 docs/sequence-diagrams/puml/onchain-name-resolution.png create mode 100644 docs/sequence-diagrams/puml/onchain-name-resolution.puml create mode 100644 docs/sequence-diagrams/puml/set-account-address-record.png create mode 100644 docs/sequence-diagrams/puml/set-account-address-record.puml diff --git a/docs/sequence-diagrams/Admin functions.md b/docs/sequence-diagrams/Admin functions.md index 3cabc97..97913c3 100644 --- a/docs/sequence-diagrams/Admin functions.md +++ b/docs/sequence-diagrams/Admin functions.md @@ -5,6 +5,7 @@ ### Whitelist registrar ![](puml/whitelist-registrar.png) +[🔗](puml/whitelist-registrar.puml) _used also to delist a registrar_ @@ -13,18 +14,22 @@ _used also to delist a registrar_ ### Expire a domain ![](puml/expire-domain.png) +[🔗](puml/expire-domain.puml) ### Burn a domain ![](puml/burn-domain.png) +[🔗](puml/burn-domain.puml) ### Whitelist a controller contract ![](puml/whitelist-controller.png) +[🔗](puml/whitelist-controller.puml) ### Delist a controller contract ![](puml/delist-controller.png) +[🔗](puml/delist-controller.puml) `whitelist_controller(package_hash Address, enabled bool)` diff --git a/docs/sequence-diagrams/Manage a domain.md b/docs/sequence-diagrams/Manage a domain.md deleted file mode 100644 index 9f93a98..0000000 --- a/docs/sequence-diagrams/Manage a domain.md +++ /dev/null @@ -1,17 +0,0 @@ -# Manage a domain - -## Set a resolver - -![](puml/set-resolver.png) - -## Set reverse resolution - -![](puml/set-reverse-resolution.png) - -## Transfer - -![](puml/transfer-domain.png) - -## Approve / revoke an operator - -![](puml/approve-revoke-operator.png) diff --git a/docs/sequence-diagrams/README.md b/docs/sequence-diagrams/README.md index 54dc07d..73027d2 100644 --- a/docs/sequence-diagrams/README.md +++ b/docs/sequence-diagrams/README.md @@ -2,8 +2,8 @@ ## Index -* [Register a domain](./Register%20a%20domain.md) +* [Buy a *cspr name](./Register%20a%20domain.md) * [Renew a domain](./Renew%20a%20domain.md) * [Resolution](./Resolution.md) -* [Manage a domain](./Manage%20a%20domain.md) +* [Second-sale market](./Second-sale market.md) * [Admin functions](./Admin%20functions.md) diff --git a/docs/sequence-diagrams/Register a domain.md b/docs/sequence-diagrams/Register a domain.md index d04d0d0..63820b6 100644 --- a/docs/sequence-diagrams/Register a domain.md +++ b/docs/sequence-diagrams/Register a domain.md @@ -1,12 +1,18 @@ -# Buy a domain +# Buy a *cspr name -## Off-chain purchase +## Buy with fiat currency +> As a user, I must be able to buy a *cspr name with a fiat currency on D3 web application + ![](puml/offchain-purchase.png) +[🔗](puml/offchain-purchase.puml) NOTE: lightblue color indicates off-chain system -## On-chain purchase +## Buy with CSPR token + +> As a user, I must be able to buy a *cspr name with CSPR token on D3 web application ![](puml/onchain-purchase.png) +[🔗](puml/onchain-purchase.puml) diff --git a/docs/sequence-diagrams/Resolution.md b/docs/sequence-diagrams/Resolution.md index 04af175..7a230d9 100644 --- a/docs/sequence-diagrams/Resolution.md +++ b/docs/sequence-diagrams/Resolution.md @@ -1,11 +1,48 @@ # Resolution +## Set a resolver + +> As a domain owner, I must be able to set a resolver contract address for my domain. + +![](puml/set-resolver.png) +[🔗](puml/set-resolver.puml) + +## Set account address record + +> As a domain owner, I must be able to set a record that resolves my domain name to an account address. + +![](puml/set-account-address-record.png) +[🔗](puml/set-account-address-record.puml) + ## Resolve name +> As a external contract, I should be able to resolve the account address for a name. + +![](puml/onchain-name-resolution.png) +[🔗](puml/onchain-name-resolution.puml) + +The logic could be wrapped in a stored session call: + +![](puml/onchain-name-resolution-wrapped.png) +[🔗](puml/onchain-name-resolution-wrapped.puml) + +## Resolve name using RPC + +> As a user, I can call a Resolution API to resolve the account address for a name. + ![](puml/resolve-name.png) +[🔗](puml/resolve-name.puml) -## Look up account name +# Reverse resolution -![](puml/lookup-account-name.png) +TBC. Let's decide if we want to include reverse resolution in the first iteration. Or we postpone it for a later version. +## Set reverse resolution +![](puml/set-reverse-resolution.png) +[🔗](puml/set-reverse-resolution.puml) + +## Look up account name + +![](puml/lookup-account-name.png) +[🔗](puml/lookup-account-name.puml) diff --git a/docs/sequence-diagrams/Second-sale market.md b/docs/sequence-diagrams/Second-sale market.md new file mode 100644 index 0000000..abe24b8 --- /dev/null +++ b/docs/sequence-diagrams/Second-sale market.md @@ -0,0 +1,13 @@ +# Second-sale market + +## Transfer + +![](puml/transfer-domain.png) + +## Approve / revoke an operator + +![](puml/approve-revoke-operator.png) + +## Approve for all + +![](puml/approve-for-all.png) diff --git a/docs/sequence-diagrams/puml/approve-for-all.png b/docs/sequence-diagrams/puml/approve-for-all.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc33d9d5355d927af9fd1415731c8d3efee6633 GIT binary patch literal 27590 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 Registry: set_approval_for_all(approve_all: true, operator: Hash) +activate Registry +Registry -> Registry: set owner operator +Registry -> "Events": ApprovalForAll event +Registry -> Owner +deactivate Registry + +== Revoke approval for all == + +Owner -> Registry: set_approval_for_all(approve_all: false, operator: Hash) +activate Registry +Registry -> Registry: clear owner operator +Registry -> "Events": RevokedForAll event +Registry -> Owner +deactivate Registry + +@enduml diff --git a/docs/sequence-diagrams/puml/approve-revoke-operator.png b/docs/sequence-diagrams/puml/approve-revoke-operator.png index 10f1e1742803e977434070040a43016c735d7fd8..b4cd8e6f7f9c6d2324196d07a064198cfea241b8 100644 GIT binary patch literal 21737 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 literal 21387 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 diff --git a/docs/sequence-diagrams/puml/approve-revoke-operator.puml b/docs/sequence-diagrams/puml/approve-revoke-operator.puml index 89b4d4b..bf68974 100644 --- a/docs/sequence-diagrams/puml/approve-revoke-operator.puml +++ b/docs/sequence-diagrams/puml/approve-revoke-operator.puml @@ -10,7 +10,7 @@ boundary "Events" Owner -> Registry: approve() activate Registry -Registry -> Registry: set operator +Registry -> Registry: set token operator Registry -> "Events": Approval event Registry -> Owner deactivate Registry @@ -19,7 +19,7 @@ deactivate Registry Owner -> Registry: revoke() activate Registry -Registry -> Registry: clear operator +Registry -> Registry: clear token operator Registry -> "Events": ApprovalRevoked event Registry -> Owner deactivate Registry diff --git a/docs/sequence-diagrams/puml/offchain-purchase.png b/docs/sequence-diagrams/puml/offchain-purchase.png index f8816f957c974981363c407ae310162d8dddd426..33d9e2db8d43490a95f6070034252693b734468f 100644 GIT binary patch literal 30813 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%0A23tD!#FDU71>eNTG;cUS4L3bql1`kGuBt$B!S0 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 `01_USo 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 diff --git a/docs/sequence-diagrams/puml/offchain-purchase.puml b/docs/sequence-diagrams/puml/offchain-purchase.puml index d735a56..18266a3 100644 --- a/docs/sequence-diagrams/puml/offchain-purchase.puml +++ b/docs/sequence-diagrams/puml/offchain-purchase.puml @@ -11,15 +11,16 @@ boundary "Events" == Offchain purchase == -User -> d3: Buy +User -> d3: Buy *cspr name activate d3 d3 -> d3: Process fiat payment d3 -> User deactivate d3 -d3 -> Registrar: Register +d3 -> Registrar: register(PaymentVoucher) activate Registrar -Registrar -> Registry: mint() +Registrar -> Registrar: verify voucher +Registrar -> Registry: mint(to, metadata) activate Registry Registry -> Registry: mint token Registry -> "Events": Mint event diff --git a/docs/sequence-diagrams/puml/onchain-name-resolution-wrapped.png b/docs/sequence-diagrams/puml/onchain-name-resolution-wrapped.png new file mode 100644 index 0000000000000000000000000000000000000000..3ead9f910757edc4b70200e2ddebd5fd466ca516 GIT binary patch literal 29634 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 b@4z+0bF^MHn`mP)>|ng9O)mZ&~q literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/onchain-name-resolution-wrapped.puml b/docs/sequence-diagrams/puml/onchain-name-resolution-wrapped.puml new file mode 100644 index 0000000..4f5f1e1 --- /dev/null +++ b/docs/sequence-diagrams/puml/onchain-name-resolution-wrapped.puml @@ -0,0 +1,31 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +participant "Contract" #lightblue +participant "CSPR.name helper" +participant "Registry" +participant "Resolver" + +== On-chain name resolution (wrapped) == + +activate "Contract" +Contract -> "CSPR.name helper": resolve('xyz*cspr') +activate "CSPR.name helper" +"CSPR.name helper" -> "Registry": metadata(name_hash) +"Registry" -> "CSPR.name helper": token metadata +"CSPR.name helper" -> "CSPR.name helper": Check expiry date + +group blocktime < expiry date + "CSPR.name helper" -> Resolver: address_of(name) + Resolver -> "CSPR.name helper": account address for name + "CSPR.name helper" -> Contract: account address for name +end + +deactivate "CSPR.name helper" + +== == + +deactivate Contract + +@enduml diff --git a/docs/sequence-diagrams/puml/onchain-name-resolution.png b/docs/sequence-diagrams/puml/onchain-name-resolution.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe12a1ebbfa0918f8cd544cafc260b37a55c7fb GIT binary patch literal 18977 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/onchain-name-resolution.puml b/docs/sequence-diagrams/puml/onchain-name-resolution.puml new file mode 100644 index 0000000..52a34ab --- /dev/null +++ b/docs/sequence-diagrams/puml/onchain-name-resolution.puml @@ -0,0 +1,24 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +participant "Contract" #lightblue +participant "Registry" +participant "Resolver" + +== On-chain name resolution == + +activate "Contract" +"Contract" -> "Registry": metadata(name_hash) +"Registry" -> "Contract": token metadata +Contract -> Contract: Check expiry date + +group blocktime < expiry date +"Contract" -> Resolver: address_of(name) +Resolver -> Contract: account address for name +end +== == + +deactivate Contract + +@enduml diff --git a/docs/sequence-diagrams/puml/onchain-purchase.png b/docs/sequence-diagrams/puml/onchain-purchase.png index a1973b7978e3fe87b1425e67dd3acef49bb5ed54..9327827d5333e8a280bec04e7f0700d7046d6a68 100644 GIT binary patch literal 44643 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 JXtCor{tu+pdbI!m literal 27208 zcmc$`byU@B)HOiS^g9sv0BHb8tcQ*o3Dj+Hd2m;bdi6AX0Al;3CG)mW9 z8`NW*^S`Ke_b;AUYpyxxdV&<>r0{VlaFCFY@UKc=RzgBTp+-VNUco|v zPp+87cEUf*c9Lp#hL%>&X1DLyAxYh~xNW0vcl#Edfis5KC3bczGkps?dvh~3 zLrZgqmPT5*M4_>=n%$4jk&xj!PR|yUuUn3b;+3`LxIH?pENLKlP2Je|#c7nX zr#085o;tn$O3ZZd{uraTxa)wSW%OSB-Up8->3L~cO&6`#?wITQc$C*i%*nE=IFGc6 zNKxJ3jeKm<>|ZQ?m+YO}H4QzpsDRKF{jq_1wd3))S+NEgH=`ph+}Sc2qdu7IGU#e2 zhc-5rG^y~*DX6wRiK*$%_j@cm8au)J2+zMmm;>!$5K#fu%)ZZydq|7gH$$T6H7+sT zGjwWEGa-A($q^FG!kF8**LiVMEEscXPIQX?m9xz<@#02dOgpLMu{f(&NHz_HLvQJn zG2QI3F*Ei_JW;5k0$xXMNn+-lNwmB>*7x9j#rT$t<1k-kTyE_nzVx_rFGI0Csn#aa z4#v`M?**Dyom)=jQR39v2=EIu&`-Z9M1?Ae9-IhZZB(Dhxtdl_btR<7>4!)~g= z8`ZE*j?a2LDS>euWlhhYr@aYrY03mmRXui;*Qa8RUG?V4H$8>rlY6Sf{`O$;ii`l6 zwKq?jk_#t1TBX3Y-PFvd7fWSD%GswaaP$4v+u0Bo$o`bdV*9z2#X}*S+z5LiMH}%N zS}){Pm6TpKtf4Zs>GY!`e$TyacYAd*-DX7;CqKpk@v>H-!rF;@IPkyT@b#IkpZ~X` z2bVw#6V|qF8_7Xjj=(m*NG2V4G-_iJ{O*zY|uR$e40%!j&owDvs2x1X*kLu z5&!!)BV=92s-}2{PwbBzEXLpl4WO_}g;BXre84xBqM$Cx>Y!ew!vMiHMOk$+aqNRAhZo_$?TE_yxWaK!ZSS0jyE zpO-&+^sP{f)h_DfMJ3Oj1zzKx#=~({^L4w`PsXCsbRZ{b*;nQ|@*$KmMVmzeG1!Mc ztqXsCz6ZN(YQAr-#KPPwdv~Rdmc4WtWtW8;F)bewS>9eGIfmaBH8^NmVxg^|{nmA3 zvDkWofL0jq;PZrO3t|qhU=Y#>N}MySV`#7!x8&4R9lawJPUDZdsoE1-V70XxH92XV z8&1i~*2h54$?06>*Kn}6#5Sweix(!5!&&2Y-|Na2LUD3s83OYCy$+bS-+G~q*dx9(UbKxhefl{ zO#PihRx*i6f{s$G<><$-K?#9JgM%42Udl!i1jdaDe|vT6voV@-Tvyd(!;L8+TZIbt z^o+(CnZ^6xzRBb4yXTg<5UZ=Cjm6%x}vgJW3expIBZ9S=~8b&L^Y53vYs-`K^+qXT(*|aA6Mld_r zPH0R@ksaQ*9J>bp_xtXC!HIZsiN&-0uG{kHnB$1MYJVKXww+`Trq(OknDnZ?_V$~r zLf)GdzrCd*(&0j>k9@JVf55`eKfSsU7<9>wo|bSjvTjFX)XaF6c`IJjO)s!*;?!p| zG^@J>q9x;uUfFz$dp$b5S3)V?z$RJkp<{>V)JsK48t*$`zc8Xp=dfdcD>RKQ>x@*3 z`?~s-JD(l<`eG(kIvQ(&IzEK$ja(z6B~K>3g<|bxGQ-d4bdR4Bc~G5IP)(cDM7t@( zxMbXFQR7Z){6*Jwx7~vx5zqbMi&5}WytD#j0SwwqqqKrD`)*1C_3izyr<&5z)GRG6 z+0O|J3wOQhir~GNT2sdx65=ZBp%tN2fql#Vk@&&P3;bZdm9H%On-i>eTXoJ_z9{1| z?=RIU!&r5(#rZLT_p(n2Fj#~r&S~g0canW*czEvN!-sd9rT12w+~HS&S=gj}n^Q5A zt{XJc*Pe1auii2`QzlFJrNp3~Fu%F@z?Qv4K||vy@6zfT>w236;m2qE>=(bfwms%F zd|+TWG09pG<2W39ustU+xu$_L8$8D7PxFC?gTrY1o8vo&1&m`zN)3hPv8#6|nno+D zcQ$Cx=a9>Y-SIc6{Jt`gKam;M)tDcS5}P*DX6tdR!D4H}z3sJ&`vjenOTO&b%q2D} ztITyT=!ZXu-%lSr%a$sy8>z~yK2W%Df`;alC4(i?((xWL zBlhykW>Ko2PvjA>hAPeIo0;~68PrJx+z&A3Fz+|BMs>@-d2Rm=y2lOrV>AY)phirf4^V2h9Hev{xPj*>FwF}+sw*oSaG;HH-?pTmWebC(4KIceoCzFs4~@j=YX5P zyKBo^PT?bvfgW0tWGy?{^4UmpLSFFGE2(f{@x9e4)5EDENkpmd?%G-CVYAKHIk> z(L_QoV>Vo>X;@^Vy#@1U)sT@xaBD3xvVfB7p5wsV0i|VoBjdpU;ksA?8kaOXJ3H+Y zn!WTDxAfLzUX*zr$d6Z4zLR!h`NES?)tIAO{weazbWKt9UH@XYm0ID)auLbOnmFi$ zdGuHG>cWIZxd+nRH-?x*%Ew<^xlW|ZMhf9+v?R$?)@G1D!#dP+T|Ho#f502H&fU!o zLIfSJQXFPL$aT$R54_?E(`kg}E4z0xuzrp-(FTow|~Cz|P|8lw>Fd*bA=ukvFZ7%880 z3QS(u7RnxT@#1}I@#afgqG7`Asm6Vd0zHdd88?+lK9M_DuW7cukb3_4qh|HgjhD&H z1&_!DYgA5p_x2Vu-+UD>?2c}MY}rp&9h@b8w0%oHoUMy{)8E5qhyDZ&Gbo6OE`=_w zK6LU71Jlv#xNqG)?zbF!S100WLZ;eEP|wKo{>pcc6B3x``9?~T$~4C|Uxf2i(8~*T z*?;L&&uo5DpfIeHPU=RjK~a?0O6)!!`G|`;fc!OThAPEED5VH_>JHUZCeH2s-IO-| zxxlW`H{*cn#>|bkR>?*~O=KDc#wp1JYobqhKXWy#5Z!P!dQ3qph zn$FCV*h}}{ZyMwbK8du(LfM^v!~VMCxyL13)~8&~K5?f@+OxIKjj;wKr(|3BPwee@ z`ZV;EI#VVdOKBO3_Q{dBHo^0aKM4=TGJ@7MGci1T$#ehf2-Vc507lic<#4&UlH42X zr(P+k++GlH^vE{)lr&GyzO0^it3j%5Kwzo4_3c64tIZp0C;`1BXCfwcH*x)5IV>2> z9N+RRf~=Y#smc`=q)^jhqC4Tbv9FdaO{}10bg<-^Q)hXWmh^x)%f+y2?m-=Jmet;#MR>8lfKs*(8FhHDkkxjmq;<5b zaey%j@#-%~T~7Im_Pw<&f3CZdn|sf&u4S4roaYt})^So#$zdMP ze0L8u;(1v`T$j&r?S@Z03^FYyS`+i6ncm)FRhR)5mS@Wqbn<6pssr$SeSB1c88=5f z?x~m9%|gAFQh*M%(Sw+nbHZfIL){mN9+JphW2xI}Fow9qelCHNBb0>1g|nk*gvNb$ zC3;?d|LOFl|o4?&2E0(VMQyER|*GR>Rxxn?^}^FFRU9FTyN&E2oq%h`2v z!|W)VI7{w7@{1yl(0xk3t9;blCa3SS?z}H&m$28;nZ)fQH}ZY({5Tdpk*ErSCaji`~J6aJ&8G>ek$|evZc|n&O2-q~8;sVcMEm zhs^!Xk+yB;;LG6#?`mTqbIS*0gx2ISTuM0kl4`p3Cv4#?ZCsi_Hs5U-YJVC5_>?jv!kVNSd#+bhs&2Xa~I z!TwIwfzx1yD!UW9v9a;QhfrTfUxRg>Wb{KLo z0z3dWBZ63aa*?iciY`PWAD>sFA|-bx+z zuBsyC_S?fehljV9sg5gP|3xW7C9cGt_PX>;foJ*CqBO$f!?iTuzh)kC+&qR|mxVV7 zk(tf1S#(aTWU3)Y1riMHBvmF!hETQ84z8}P#R)jV07Dw%u^h&$yW8^2+tmL+TWyv9 zF+81QQTADSdgmcmJu*Ji?(^&OMs;DX^6YzidoSWDqM5n49&uyH>s|Kq_+~KL{#xsB zD1RwTczU7$GJPJD+PrXLQj-XY&uKc&F_@g)V{7$xXx|B?qMkC5?$`=B`jXS~t1i|r zSU5R3!-cogiZKeMp)x0t>*(k(G&CIhFjQji+p#dPw3mxR#a>GI@CN3r46+OY>*f7Z zJmtR4u793`WLdsfSX8u;ej~Nw6$|A=$#?|4b6N4HsB_QVUYqs3=CvHYm8zPf<3H3< zT7FOzzWiFpWi|!ILkHr?eBYZ<%|HU`8vGN-2h&)SYSKM7Unvs{=e9oxr7wB#-~meN!B(rM2QUjMXLE3QOHhgc z_;Kvm@G1bj9iv3IYO1f7z7rf4rc>@Alo6=f0lQ><$Xr)d9?wF-cdTy~=Hg3t7A|*!kjzybatk|uYp7T(-*0_x zOO#lp#oOH57-@aRei!KksTI$xVW?Xd>H- zC>qbYsy;p~0zRWLHs5Vie;Z;(ayEsS@M~)ei|l1;4tRZHNo}UHnHmKY>p_Lgw$m-; zP<-3b&12Rj_M9*fz9RbKjYhHkTr0or=LSptPZz8W+F#wwNS3ql<}6w5Qq{ehkx3XM zM=aBOad7>c1{qsmt!(Q3Pftm734m8tkQ>2r24wUbE}+XX9BK`>A4 zd1b|a{>~-Ik|eA@e=n^{I@Zo4j_n#S5U-O_HI@5#_7P`^!RKSAI!6Eg96_`Z;T@7o zKWWnMJYLNSZO*Sj5yn=tq=|k))#ma!H^*$$n(Z19pHrH>to;A;0q>86u)jYcuNDZA zMMgrJ2t)sV_T#O~^<2evjkcn%R!?VE`(YoW;%Xop{o|SAeP?ALUP}@AKi%AP5>qvL z@a~uKZM5ak_RhDDWgHZ}FRf}-Om+NX+-Yq^ziX+2n6tq*>9iGp`*K9K8hSg~&BL!< zxT4zZcKQ~D)}<+aY1K?0wSO*c2-M%vM_5(IfQnJbyakCUzhCHO&fw90!o=bW9+ z^c!~v3eDRco}??Mlh~m!({nRE48JDWi0UQ;UrvRoypQ}T3No5E6Ca;b!vp%~p8L)Q z21(DK>wZd-gfMm9{8gyi*(rJ9t;vyt{f)jicT)l|FAHmN;Ixxfb)0y?az~i>0zO;Z zDwRyhYtI9Z2qF$v-S=8)^TTBVoqmCVZ#n|-DZA4YCnmy0EZP!~%}hy1NZ7QBD`WvA z%mZjpP*4aWp|7f{;;|TX+VW5eAedTkUHftqlGFqGYmhCh>myDZB|E_2l^FhS>TJEfH-$v6A9j9H5yBv#Iu*w4G(9)0yfCpnACd0t-C zG(We-{^tNxR`<^0K0Q%Cbh|0q->_Fx)Ll+aE{gf)C>H|*13&*3>{b84;C##k44rC- z;&g8%_Tbgj%bYyDwAcc;eRqcwB{18__!fI|XfJMUZ&xvu3i5eOMX8QDtxh(KXSlh! zed)@;e5LmYw|sXMml5aPr)T`Oy)53JGPK@as9y)}roYe}x7&K+L!KPb<7^^7Md_R9 zc9NH7u}Xr+gpr%sVXtOBL25@7>3oX4(?1c86V; zDy?HL+&;U5owAP7c7V%XinNv+LZW-Rn{3hs!}LS@o)oP+S{*>1+YC3guU@-mn0nXYNbJXL)Rn1&-H-_!_r7;}@TLC@+l74cVMg;HJ!LD{Lw#Ho6y{x;yU} zcf72$&QQq$np4>2n-Tkj-R-VdH?6diE@R&@C_$0IX3rG!#n5RiF-X9TiKE49dCd7j z>#dD~2q2I`U1V0`_(~)1!&|;${x(SC4FMpq-PToaye3G`WhOCj7!n|C8b9~>iHV6f zw$pOmqD&1mLN1To1x^kxv1^yuZGW4E&BoszPd^2PRHc}-G!_*=%;!Qq4Mo`i#_Wbm zoeNBR0w!W~T!LbgUc4B~zmX~@t6ciXzLt?(?z!;L3n@Y;dIUn%EMn_SefhHLbC8hT zY+GV=l|QbS4dA}|#gGa+|M-D3huPrveUML*SYqPjQJ7US>yXf-uxknMr;fOh*KrlIBrLFIFu(y#br5{djhpbMPeLGe;3NUJrJDVK@ zy0NE~TcW*66+?Z7WSrBj&qbV9laom*iO5^x1U7~oN8a`iVe)VRZrYxT(M`s1gg6=> zVCT<)!CGR#diJ@IHR>$Rm@!CwhNJST4A-AAO+pw5qcOLp;~?gSz^wu+S)kkyokKOAH|3>T5vjF5#93B%287c0pMmGiWA?A~H58scF@BXhK!O_G1^&sC9*k7Oj&ktCC zED^vLfjy)phw&Qh^tVL5e3Hw7zhefm_mwJTE^BRVZICdwx3`b8YH$e%X!a-N`uzE2 zJnh+zR6?rxk@AtICexaG#O=rZ$!eHVYCl ziInp4gUyu*b>BS0It)zA>Pmo?A!IBLE8~)ZH~fN+vz8clFsMqs{I?g3$MVkhGE+`h zs%>hT(>>Vk$zs>cu_VjE(#h&>97F90MotZ}4R-p|@&)Mp4K0}n1a&r?@<}vTjSA20r zU0vO>Z0$H!Py&nN;vhC2p5K$Z&)wH8%Mh^ecqN|piVdXm)h`)2``r(@MbrU2mao<@_xfYXLKp+L#$+SC@DT@^e zHnnb^K`n%%WDM@rF;ac)UndlHsN#s;4s33jM~snAo-lKh-iQAvxJ?AVHeZa5ja7Pj z;R?T`8p`YJdX}W9 zs3_pbF*-p(HxQGR-r%JVph-R6Qhu|n_X||c!#Q?N?iLR5v14DWaM`&`I@2IC;gYl6 z+9A{8w_<@ItIUne=1>d*wr}w5MKc8m>&16lX{=Fy{y8MObZ7BhWo4zexA!=HFxt;Q z_-Eg`b?fq#D~-I2Bvw-uSukg4)kmmZC;y;KD4VJ{D)*AVGl46?&uxQ@EwS#Dm4D?v1Y%9riOBl~{8FDzHRi0tBu zDAXbnL{;+7rRe7X=muVj1>*&jkBh@)EaoesZ$0*0WMmq@!gc|l0l=!Jt5>g{laKe? z9vmEmK`sD(6r^VWjE12@+ozSqcd7#kLjd)uSh zc6Q$i%?A=Nv|JYodi-$VMTMM}^}12b;$cUqC5roN6qqbPi0;l*Z@Xz^G}9QxqHb7p z29;dyF^4{s5P;T$gM#|ry9+22Q1akeXq4C)pXi!uiWw=V#Q1aN9?o`SJ6mZ`OMSi9 zWxQBoW>{hq3kwL$CB0X^x2_3n(3vx50I(7E5fO}!kLyVwF$wVS6uND#UcB3~I~GU_ z18z0lLY)>ki7+JW?Q9TIaNQds{UYYNy*3vU7l-fs6+pjClmSd6+W1P}-RD=ooCFYt zZVK@toLYcExn#}%CXI*(mCiY>3yzCgs_Yxco{-Vni!4XJeY5Lr^Xl~OQ4qP^_=wxI zyCNVRssnk!6(D%ZGrZRT16#QP#)NXDYVMX$1t;Um=Z{av!Z^;aed!tiy>@4PK}?dW zh4qo!tzLhSt#dDepvY>Z1Dsa^NxmR6GfuX@P@g|8`C_>&-d}q{m>4R)#!7|P;v{~K zje7piaD6IYpExTZJ(yY9qw9(P5*_z=ZpYTw>1w7@+ScY~Ki@=&Kpbu4Opjbl3&5MxqJu_2t}Qc$LmH#ave_zH)Y??aG&Y$^m|Uxt5rsgmgBUw!JlI z=;+$z9z)h6AtL*m)eH5xxcVIqJL~3r0n{got1Vt_*mC^&c5VsZHy#2iJe@+tB*2P_ znAh>#vv(*p>0*}l8FBlHFMuxT-2rUV8<*ZTELH5#42S?b!pj~bW1UZzm#x^R34F`? zR9}$-f8SbJ!={Sja0*d~m}TkBjVdgoGb8p7f+mEjg8Gu3mG*h@dG`5gy`>9xnosb> z^IGayS#cPVIn~&qd#O?q6I;)9v-VngD>S%zT|Y5D*}DR3>Txz>=>5&A&dyFZK+!~3 z#7f4+ukxReQCXS5M7DlCP+&@awuVq-HzMvmFw#~}#?T1V_Q~{?8p&BT&Su}LaCLTi zuJcMcJ@Smyc+`Dek1g~EW+BH}&#sa5Ht9Lq&4nmH!7O8h{Z_NRV#U#ukopqZM?K9# zsAl-oN}V{Bp$O4#iwdRW6&Jb}n3J;vRog)#AwcjVjGuL8h&N>q|t)0=5Qz+#v$L#r484zjnSBE)+@%tpj@eZItgZgg?3 zCkOL3`UZ?Zqi}zT?KDBD9*5A*{F`waD{X6m3lDH>OCCf-5FJ1Ma_Rt^9;-?Xa@=90 z_`*XjB`Jwd!6nV-e^%|CgE{*-Ad!LKxU~jbIYTvvCW8%OwC8 z=DoRN5CIYs6RmJi+FspcS*IC+SA&9B{MBtwN0bUN$P%Y^s^hVR8}*lBlfPmKK3r;q_rn}cZ(eew(>orGYrmw|bpZXvAEE2>!(a9*7R76o8p?z&-J zn7>N|ZzAT(J@0IAI>b=pg2jawUaOP#hm{ngU@-sdvEDkq$MV3Y} zM0Ma4n6vCX^w767l$;m(xt*HWv%QOk6_~OWUpd|d64_YX-rj-ndYNJue@dm7LGucwgr6U2;vXPuGioa}wl7e{2I7;hKRNPJ!aE?+^Qh^ZEwFq6w!-cb9 zXmhFH-IeVn`Gx`0089Zc2o)97{T#V=psY{n9kIQ(Mm=N!x$Y|)8weueYDmg&>*0|0 z=Is>>)Z(w9Q|WzQ3J@{hG>_}AL17G(`1oacd1T;Ne88XMj{vEDUB6xTKh_!0F9-(O z_TN#lKjHrdcVX=yKska6_)cd3$E9kUEpwd-{%fTZ{0mqXQ$zl3sv@(C6_f}99u&9$ zRsh>(|6_Qj)w=bPc#ibC-AXjSxM9uKSJtzB^<5qnH;N04p8nco2)Xd;U z!r)~EhR(@p6L|Kekp<8C9b>Sn_2wD+W56CVOkIr*a~t|3{#$tjy2lvm;d94kS7`3s zzmG>mrht|9?85Cv;K{%Q3nsaVbMa0nCJb`V)PT|i8oO!*!BHHs27KATkx)s9kCZxJ zw7dDK1dNvnz<=W~AJ+EkUfR$qN_c(*AtoHx3K^bu_M-P^~LK zv~K`SzSv=DxD4ch;sc7Mu|nF2e8@HM*tlWgG(uk%7RpR}*os)Gx0j@e{De+vTOZBY zJ>*hP%#4^ARV}S&d_~_;)v^vvn60g?m`JY*DYJyQc<(U}>27KPhg;A2Dj66U8D{{= zT9pD_II|osvR@A{50!}7>0M-eJV70B2lG|Hvkks?rwqHHqy$xarNygn>5m3HUcY%G zc1?JD=8O>sByGr7ECqHmBv2M9XUS8h36D(C(RnQXAG27%9b}HngZS+k{ zUYSIzeo2)KIiAbyt$Gv61&AtVSl5Ol>9AZO)O?3cU&%f|5p;^3U8nR!SgQPUwwXpi zD~U8U)!#W2rJJg~i~1mqWa=O_tO8l%Snw`fNrXi;+m97@MhgU#9G$Y@{7zRX=m-cp z($!iI2RK7ZwL41_)7cqRN3dC%z-oZY^hs$R5i4jNZ(4;}xKz5L;AL=`tE;Oas^Po~ z2Cr~Os{A!J(z{!J5CL;@;Z|TCPw}uAE^T;!Y6!&B(v)EV4cy;0@OSp_sA^^IA**i! z-+`B`_Dk7V@RL>x)15x;6Z;{I8g~uQ5)s7_c)3UI`vVuC)b;iCAtvBPui7IPRSO`1 zf4~GjsCv$xt*NUEG=E%Eyns0~QZAyrIP{L(GB#X51MA0Q9H)o|zeA2%o_N!{O9+kZ zaG4D$Y81=)(YQJ2vse+4=Rt^`he44QLN`0T%p>XR*P|%zi6i}pDNXoIpvwCA z_@JPmj89C!o|tji0dnv=yP&}bC8UADI8=ct7)eAwZxdXN(yo*u6ID@BQCwUM6@Nn! z`<+Yw9>8mps;iPyUO$BLvn&0ERH-{iv7qNcIM@4h8WI%_GBWbArJCB~&3EDqU|ddm z{UlpD11Jt0{F5h7j*X20aU-jYf{Lo&bHTiyt0-Jk5KOs;Kt+tG2GuVJ#|Znzqtxdf z{mq2$&;G-I2r~ALL~QNsh@=7KV`w*pjPt_#_tXNTRkiN{NRe%`=|k2B14RD8=V|?e ztii>{-79m~$NU#U2GYPG*`gBoe~|UQi^zXo{<~&PCj67O`6Z7*y@G^rHI3+mg+0JM)2=~`$ZOaWqkn?N!=Nsv3dJ-kCIV~lK&&h7 zeS&a%edGnZ4;VI5liSl;urb;HV89Nm1Lhf=<;TYyAorw01OO=$YRFem+89Ow8wEVl zZO}hYpFTbM3aZAJ`0!3LGBO6{`%4G=IiTv*29x39;R)JIVs+wC@-(-$=Ge`)w}E+O zN+u5aC_dbug^Q*urHo$5e9-ngI{q!0#%5EAc({FTjs@BZoCyAnkTpNl)Oh&;jgH7D z^Zj7T>V(|_H7|%RvoX3J>O~gXMy+-!FwTJeFPYu|au&Fl+js9;j=bLk{6>&UAt@0VE*J?3xV4`FXW)G7cRF)VJ5LsGxn8Xwht35e_PkdTMnm%QDvwHVWzo0@#xo8g*% z6v?&&Nqglx(LciO59h>TL=Q#y9e@`(!D(iEpEZA$ zgG0f7r|J*p+CLm{5kT-HqSMjGU$WJ&|5+{K(2h2qN;mB$h~Ef#kN&_LpGE-@Gf@!LWfVM)0w*vSV68^Ozz7Daf7xpsssy4RyZ`Vj z%Mp>0#3xTOjU-4{payHc^$w3R|NHa*b{Tpsl*0<~fBHh@k+d;gaRb|e{yZiO(w9^FR;RPp&bno4 zRsZTuibqAvLN1k)s5MK=kF0TX0*na|SN3|!_kqX0l>X6hInM?^@VmK++=;m|%Wn!X zde#6X0tso^vi1aApJAmUfEq3?NQM0nJrTyj`Cd*%O~R^w9}rf)?-|1iCm3vWHx814YUtH5v8%K_UMVnJYFAiM5+Dw9z~=pm*yq~%;t=#iqVuh-uKHlilPHk#X#-gyu*Uf7w2YyqC|5x#4Fmk@ z7JA$a)LJ?^G*m!Z2>eoJ5TUM{vjt^y8MjZaFAP}W2|NIqGuLHhS}#}3+Z1%%dO2?Z zZr9@l)%obLOc8u2QxwP1qGDFBeewx>2)(^(4y9&&7wEN#!yvQ|eQAVg8|?=wHagD7 zNbC(r)vs?H5e$!%ut95rb)5E~OH_LnEKLF}4GrF=Anf$bg06&@3Jwy3R5X1sbZPxE zW*Lg#i9&|m^60i!g#B;@#EaeCT{hkK&2rdPHa~-Px*up{P2QNw4HRT#+(vD54tOO> zkar!0}Q+ljWM8)y@t^ORp zqep{RMl6-zUqwTj&tbk7VHzyBtY7sbKL38X3}(>Fw8}lo^1F=yB7fbU%eiKX@Bcpz z(JO@G2Euhpf#+R>a(b-h><2XMvHuzYZa?spK==L)jX5;Vph|oCLjjfcXz3tm&!4l{ zRWj;v>i@fNt2Hy2#l*{71krZt8N#Lj)^>eXbZvgubu&PF=dM4g`63^8sSD%>*w?CA z8uq}`WVSCfDSUr_h%0mdv;Wo}>5-6Yu5z!!Y=sh0QFHt~UnSlE{ia_icwSSHJ zYhU0vfQ*Cz@P7xy`6N}$LN!C(5)W1$j8r<~4fZ|V9VpVe-nRmEr)F5h?z_wgt2;t+ zO5x2Bu0d>_dq0vwG#w9Eb8$=dma7T-W;BG6#6L7q-e1nK9*X^~S3Z|wS zIrK+57-Ne6GP6I^#^?3&Lei(8rK3L$|647q+lxN{O%W1GG@JGlcfNHPw#sWbgoGm{ z_AFe!*FcqH<+`)?F#9nEAjDgW{GFLcxCIdn3_^p0DY%S?1TeG_wn2g8bHT--n|!RS zSu+XYPg5!}aI_Ca|Sa{>@zHCa#0_wlH(;96f_ zXH(4{gk4q>O6}=+(oc%>(Cs|Q|HqIOcQLN6uG-kxEDpXs!(Dt)8^~CAd@^puF{l{O z52DC_&g7Bu@kgxq-=mx)VCSESAj2LJ%YVdM1fu*c_C?WhwUdAI`W`ud_(`63e@`Pv zzeb2P+IUBC7r?Tcm%QoskdIjFV@Kl72`m_DH;oCEBQ)HNzJXih@&wb>u}Tzi*A9x` zBJQDHgn>{v{^eeA97O+TPjcu>`L|1l{1OQBKYUMMhp7M^YU9^n$N*~Y8vd087srlY zvc_*;H5dY6NPk6G1Kv`EiXLFm7M+=^!g;5H1%I{|Dnu8PV@f;0Q^`y z|FH=GbO`_7C-gs2&(Rj}X}kA>vimKQj;ZWaNQpnxdwJuBt?Unc@dKLtwQ0o>QX-W9 zMsT`Gu?;Y93Sbz&&KD1zGLWijRpzRWuKO=R86jE$EJk$yd;~0CT2_|03Nnrr1ud-z zSblrZ7keizYs_6;b(H!C0GwwId~#F}A~wBvrmX6yZX!7Q`b;>pvx&2G=up1~ws~WoKGs0?T)DkAW|qL%%BGlmry*q{oiE zao=%BqvA1p3|$w{!v*KZfGcTf)3ahR)qbwKHiR71%P#;C5?(@i3Nk(!h230tXk4S_ zrB!<=w4VWU6Y0;?C#L#RE=~hTe*~?=lokRO4G_xFwP9FV=5oqgD5~?q!{woJ?atQT z=`{@Z-W8n!ec(k>Qh$+U`4LXIx9u=k=1N|Z0Awj-v%vknrV~&)fH4G-pXz{OSzBKp zE-;N5h$h%`JbOr9|Cw{pwPV4d1XRZ=G@I>$zYH8TZeP+e)clm}EqL#9_2wwd~<1DvySMdM4^ znSagAEFDoGOu&2rAETP7M$Ch`)fNR<>5U<$8To6YPp7Z$0kx*z^x)Yut=G32K#4w$ zP?we&f7Ai5)2K{-$qsoJw7q>nvlF}HIT6Y`s+N;|_Uu_de}9lE{o`;DV+2|jr~?4c z{D-c7X9)Mf!G-8R(fszM3)eDzBaH87usovn|6IliEb|Z30Cb+$F5xjpKF5uxT3sj(z_J3u{4 zK*dLNfU9sQ4*ib6A#Uis^(%zMKRP-Jar));r=VuGEv!TT+h0i>3K%ucL;$-?92^|X z%&&lj0NHtU0s46m+!n&6@K@A1e%(k`gYF(M#O9!FLy1^3K>lYDi3kL*WS7y+bVqf2 z-_Q5vNl=){L(Wcm-Tzyv06K3n7jqLF#l&`y&g?3@kip0t!?VWmcReISdgpN(bVXg1 zGzR_8#ib-aQvF{FEJY(^MenR2@S6MfCrERAhf;skRwlHWQEj5ipd5hoDUKbwKm0z|_dlZZ-w*nKP=o$GxZa>mB3gC4Jy))<|7T^XwlUv#5j1+J%0VMf z&ua7CM4)QFE5FQa+90?@Km!1liI0ws4)n(0q;ae1m=k}N-3BZJ3CbY3f-C{R!%9z4 z(Rya(3Ee6_0*)z;9d0=Ej9jsxu&}V8p!E5g_N4K)(SrP7x^IR*{1`tV;X|TLavnxm zMKd2eIy3B_fbR%q{rHj^Fj70hPg{NCM2SJ-$aXEl)~G9p7kDt>gC$X0!UUwa9Nt9ck9^g$>L3J%7>!yC*ueweSAi1tHb z#p@sg2o1XhEF(9wG{{Ku{4dugzJx9SgtZQK?g9g2(gU3JV-ou+ev6>EVPX|zjBhVROJ2MiL`2& zi#p|jOPk)26^8oKOI}srcPtmxIgM0jZ@lkVlU_&DB#X$-Q zvns5|qXk#)79b&xucCB9Iu_uc=dhrW{*b2HR$U{Evt;}f^pX`A)INFkETfPaI^Ssd zZ91W+kcpZ=pwe-s!0+)>;jqE3yNE;=QTX`w=`U~&w=_IU1H*nQ;>b1 zR%GkjEX%5sm98EWq*(>%_xIUp%LsU!N~~b7f(z$e7I_{JJ5NWm5sfq5cqyY@AndQ9 zN^Cc)QNJoQ8{FM50R2CB z0w%8z(`N5CDJdC;Cw~a|(GYUpJ>vxj@(9fRJeQ@|bt5}p5n1g&PiA?>%Bp>MELHER zZ$D0b>(x?)#^B@vMrf0Q^DjWgV9mC!@1KD)J%IRtqle;|;FJRp-Qg@Y^(inMBbvw3 zm^2ILDJ@Ik7t|^vU>AZ;O+?!%I6BTqh24tkA48m7_xJe?N`1hu{l7e3gp$|dRulji zAJvHHXh@UArzL}%ftc?qg0_~+K_t*bg`o(i<($jtB)EI+nkp0GOsC&Z#Q-zWnT@T5 zqLBof|LyP)Anw2c&_A~OE*k0(3^X)RnFC0IeG8LUb;wKX(Jv=~3#0sC|DB$Y<04h* zcG0j)NZb`EDL8=VKDF;T`fJgGR-;~RYUKYh_NA8rH=r;h4CZy9v-?Z{{{%gN;Kd?u z{Qy+vQ(nt}3Ba)x1)$#EVQ84vTRodYK2-AH(IYf=Mh*@ufb#QwpP(Zy;ls#?NI$k& zIz%gV!)3H9muIBdUtOE4kFWim9X<@j;7 zn|@gp#(~|!j-G+x^Cu}2wE$;F4CB2EOw}TOhUH6c^V`{&*s$Z{foIUhb{!tvS$OR0RI0$kNdDb~v-c zWsRbK?jzHW)k{}mF#oui^-7kh^QSbH)oGTB0n2iH{$=Qj((8%}wbr(-e^9D3IMWF2 z(CUR|eK4G_;nXA61A?1k^T<+WNwBI@SVk4#B z8Yq-?z8HEN&a~OvA&l<9O`&@uUNHLo3`eh-;5@_eLc}nq(3Px0o0jjJ1ROdfuy*=V zg!ZW=v48`UxR4uV{46_X`uG*qXm(wKBDd|?RH#eipgzP*U^yrE47xs?dGsp00QFZI zLnTY&JQ)dlL)5)BUTAC`w&CvLyQK>kE=x$EdWuvK0L3znhork;Xrep53=hHMO# zg%$B?zn@brCpkv1 zmuk{$^E=GDiHoxrE5=?R1jMWBgmrdFO9$sYoXa@SHoYt4o1DVxwY5I%+SHrgZbU2O zLW2PohT6?P0R?V~rMxf5BME#sJcWMH`TRBaE z_!7BJYU$z0Q#Dvza8{Q@V5)ylp~J#)qphuJU0iO&`EWj0v_J7N*xa?v&ssSbZ`Acd ziZ&74PX(i^a3mDtkhDF6(I>L{r1O-x&`|y)R(Nw1mG8Q&EGdO)!v|Sau-ewkfx-gE zNoc1bFDM?3^?m5{@PvceAZ0!{(5rxc6Ax%Gze>M6{oE7!tx88lw3y+7{k@A+NV^WX2fe*b*`*sg2W?$7D|-1q&yU*7;`k6-^Q zpf(1@+VH}9O{2g{Z_McGxUlOJ^Yr5wurGw3{ZE`k$meT4haSAyQ6?5nr+htfeLpY1 zz!80Ad)B_rF!om$LJr1uQ@)M|k|}zjwJ75>Abw_#Z-L&r>o!~&UhEm3VqW8?+1a0> zh)Sw}^4d*?54IT2+)Sv@5Kt9`kFnR;&+N}mjg!glNfL$ccc@e+3$l{pf%-RU_Acxg zHePYU)UAHH=aCj0pWco}&$gLgq^&P2?hv8hf7yF3`jwln-qZlBNo=euTAI#XoyT)S z!b9!}O1GFLuj`a6Tauf`x~Lld@XrJv+Uf1Y8qS2Ct@I&#s(wUZv^TieNp zn+#@&G>I(p1JXScZc$JlB~xC-ml9=1nh8T>mdB>-E4NbhzL{2 z*3VS=FUYoxaP~P&OxT_RbVOlCkmMq`CF_T=FE%vDu$E2#i@-b?0kpI_GTEYWH_SS9 zqbwv+jemK`Iv1S~mPUYc-}Z&SX;7NCPx`Tz4%ol?iBkAS2%o(~ zi;U!=zAX+YY6oDsg4V4d&Z0=w&Kh*Y9(V=cCK#-$gdv_H8L$cQ>lX3YFDWOVe>XM! zsVpKnF+CUL8cu=Iqm@+;cQ!O|ZRJf?C@t;Bnyx3X^r=*F4?invC~s+$XfM=w;|W&Z zI~)`X6r4jtJ$Yx{0g3G858UK~Wq>9GehDIKFJ1Z!_%fwxfA$+-gY*7oUm_RpBdvP; z#GG3Nik;Er0OjVGIddnqOeuABfoL#ZENvU{;X#T*XjEn1XouZhL=g-&8{>0nYwmn! z^4?{1hjcyadT23J&OD;I#SOdV^ie~;*f{eOtr?m4WXF|^&dym`S&^_ zzmOn7mTO}2?2mON>72~qRgT?D0|_RIbDLVOC+OK97a3sWf-AN2?rN=KBMLs~aAmdD zna|3)UzwyRe1VbS(}S4(ba&&eIi%NZD5T>6*=gSy%ZXvHt&0#JK36Fj#!~)z71h>Bj+M`)mX=Z()dC zb7SH5z{5M`cfL)LuLX8$4fOV%kF`}3Cc^>hypj0|^&H%;<2EUi?^-sUHB8I3o-|Z} zD!IZwRO5h^`1f3<8vK4uND-()*$Z%~g9mRxspX%gcQ;voi19vt|2k7w73!1RLulo;&@qMcRisy=J`zgh0pS^LN>4c&`OI zI^z91{YGC@8kJgq`SgnIIRD<~c6Oq{wn?S z$X?4F`Nl7=W@F*;nz?ZR@w>5*wd6WVaiZ>|qxrH@c7@$Fw9YZ=l6^mGYh={#ytXkt zGHY=FDONv^Sm&R*(yLp)7;mz{bG3(d+}t>Y)reR&|GHcMg>jXlZ_F*b1GCyzo>!Gk zk{p!&BHY)siTfs4eEEl)rOd5IVsdC9_dVpreaR`EGt*t23H>A75LTpQ*&Qn4WaYwe z;z+GMD>};_tG?K_h~m-GPmu{R+&b?nVxu!d0zL z4Qz`ov#IH1wSy|~ePP{TYBM4?zt7Ijjoepa6E{?;z{|UFIrwdfq0WY}|NZaJcLN%` z3Pn;dC-R*qkU7@kR@2s&RQY1&xNfxxvoYCsRw=x!TcNaNLo zH#bX_)TR*!OrJ>5#%ZfYb3(`hUIFQu)Hk3N$7h!8z5`*4)N_VO&^FCD$PGM!LmZGa z!XCpRN@_BirRDaUw_TfPjC$T4VZS~#&K(;As@dEigz$CjD4=$%;u?lDXfhgkv}!)# zeyZ)B#x`NaYDodSc~=0aS$=AWnAY;gQQh9Q04OJU;U4#_A@~P*y#3BxQI{vg2b)8f zVyE*nFbj*qVowv!B%7kbv!GXtUrI~NVd(hI5i- zQoFp11$x^Ql-$%!90GoH5IZoKV0@k0t{7ZMb?FJW`I4v_R@l8IVMQq=H%3JCsq1Hj zhA$t^PqDbv=#gAL(_B#jYB)-hSFc@DCUq4(hqowG{QR%S(Oi-?&1t&%S&eT};iC4X z#%^B0+nqs2s!Gqa!r>LzV_9`srl=ZHf1Kk?bYUS3lNScoOKtFmA7)kB?_%I37Z;ZJ(z}OetgLIxvKPiT z_Ef1EI-c_fRo`WCr*CIMzMow@b54>Z)r~Gr0FwQ_{+R@OPbPB}QZr!@L^~2|ZjLEvks4zgqO7%isLJ$Iu$KP+aSk+!a@@XQ@KaA*hY1}on=Qk2BQSo9P{mv^5xF*1Ug0g+qep+DLe2($K4UVn(C2fzJ^>M8_DvS z?I?K-L3sa@(<^}mlMxt9?T^U_g8OF&=&sIWM#YQin31J8kbRu~71WH!@5HAL}iNZH5Z(8^yt<2 z`1|bn;H11rv%8|3 ztuI_?4|eW&7yEf|NGrMRKPSUa5h&)jXcx=hRaKYS8}z|Je?~Xyp@f&$H0USwm&UY}rk z2a0TmgNDXUaqqm#81Bd40W5td2#V1vt089{ z_v;aaj)Z`N`N!YD(01E?qIu`8J7%^pu%nB9lBZctPZEP!qw{c{jE($Co1q z9cgYK7f}%PfH}|XgoJ!htoEs?;uL<<5~n9t{rRd8)N~=E#+UWe#7?xHxYRn>X9eli oq_%+(6_cSrkfZEB9~?pYs&LVWr-?dvr4wXw{tv?v1K03>0ed9AdH?_b diff --git a/docs/sequence-diagrams/puml/onchain-purchase.puml b/docs/sequence-diagrams/puml/onchain-purchase.puml index f36704e..6ad432f 100644 --- a/docs/sequence-diagrams/puml/onchain-purchase.puml +++ b/docs/sequence-diagrams/puml/onchain-purchase.puml @@ -3,6 +3,7 @@ 'autonumber actor User +participant "d3.app" as d3 #lightblue participant "Controller" participant "Registrar" participant "Registry" @@ -11,13 +12,17 @@ boundary "Events" == Onchain purchase == -User -> Controller: Buy +User -> d3: Buy *cspr name with CSPR +d3 -> User: signed PaymentVoucher +User -> Controller: buy(PaymentVoucher) activate Controller +Controller -> Controller: verify voucher Controller -> Controller: Process CSPR payment Controller -> "Events": Payment event -Controller -> Registrar: Register +Controller -> Registrar: register(PaymentVoucher) activate Registrar -Registrar -> Registry: mint() +Registrar -> Registrar: verify voucher +Registrar -> Registry: mint(to, metadata) activate Registry Registry -> Registry: mint token Registry -> "Events": Mint event diff --git a/docs/sequence-diagrams/puml/resolve-name.png b/docs/sequence-diagrams/puml/resolve-name.png index 16f5e97c76bfe7a82d3f917c678defe8966a8df5..c74eed80522656d223fd2db991d7908b5596f12e 100644 GIT binary patch literal 34564 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 literal 13492 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 Registry: metadata() -Registry -> User +User -> "Resolution API": /resolve xyz*cspr +activate "Resolution API" +"Resolution API" -> "Registry state": [RPC call] Get xyz*cspr metadata +"Registry state" -> "Resolution API" -User -> User: Extract "Resolver" +"Resolution API" -> "Resolution API": Check expiry date -User -> Resolver: get_address() -Resolver -> User +group blocktime < expiry date +"Resolution API" -> "Resolution API": Extract resolver address +"Resolution API" -> "Resolver state": [RPC call] ]Get xyz*cspr account address +"Resolver state" -> "Resolution API" +"Resolution API" -> User: resolved address +else "blocktime > expiry date" +"Resolution API" -> User: token expired +end +deactivate "Resolution API" @enduml diff --git a/docs/sequence-diagrams/puml/set-account-address-record.png b/docs/sequence-diagrams/puml/set-account-address-record.png new file mode 100644 index 0000000000000000000000000000000000000000..81bbc06a78ae2c37a6d3aabb1254797c2525b2c6 GIT binary patch literal 25510 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

baf~HP+J4WA940{|STxw^T zuu@dG$N15(`_)KSSkXbof_#b!ummYfD_?C4$dwj0v7{bIe)pGy+8(1JKo$(i(K?i5 zj3HzgVazb+z9b8I)};u~UpfJ+>?rjQDw2_r6?_4MfyV%{q*hi9%`Ziob~mopl%}8y z(=;63)`bD+7PFFX)`QY}hyZ&6@^%xAV-pkUweHXx0PUSSus`2g^<>Ef5z`^%+aM}3 zpj`_h;9YvrZpgvbfnWeqE{}mIGmx-O8qrbmf)mFYWYO9vKkpQ1oEGpv6H-wf-3>Z_$+>|A&RSwIM_ zYV8+uki4;n!bNra3kvv!C5C+|r4tzso*!F5Ro*nDv>B_3IX`377|aZLqIKXffO>7(WxfurQo{ zDC8#up)$so>3PYwN4sL&l&NbP;miLHP zeF~8S@sTbnF>xCrbit3*A`Yr*j(MjH6lRTb4m(iKwsJ3+1NOWfnJ(eM$aB*Hnj72| ziW`(je4_B*`__5c$n{z`=nzXZsD3|>;ga`j{Qcf0_Hqs-)UCzg>f+jfh}75kNY>!r z$NLJ&r!q>4;+KI-)yT)U{|(|3pag`1E6uB(Ar18VeW~dc%8h+X0#M)pk4(46OZDBy zyaPf2rOahvbZBgB7vNo7-N|@>#-LzBiI$sJX9BO{oQ0vGA@rEg>&x%2I>IP0sCe;j zE}<@9#;ILmfNg0Ux&g=klGhXsVF6cEN=iNO4Im-W%YYW4&gRe_AvrTQP)a`%HI)O6 z4dRN!O}_hZsdDq+vcBr?7nYDnxxI`9{B>A4Ki=r$6M~k~H5FI@V39PG`e?OTAIl9Lb^Xar?4y(Y{93f-RsIHHy0Q&DzIwJz{JVTidF#iVA}*%_i0it>WYdADjAgeK(qmnz5g=)&l_5z*&Eyz&nT(c+SaJo_ zAAzgb{jmwuAPJ3@+2ApLw)Oq{_%j#f(YDH$Ots?FU>jQ#WNkSVCcOX!cO*3WpkdY3n>4`TsaWm)_wxz+b%9H&dxX9mkhx! z5+%jN#JIS^W@O}`K2AKnmCerin8UQu3%F;1f-WvRQ5a(BW$d*-fSiJ=I*$&>&p$Uy zO|A5NXLmP|pO0?|bWHSd2Y(DzCQ!_p+LT_WVxO3=uWw0`Om;fYZp!o`BWVG|tbZ_VQOcYso`r*QDazpEO@YCS2*QN;0#zsKKE zQ|_(YjhXEYVn5nH4!YET*VNWA&2bUY3R41#2QB>c)Ukv5@%yVTzdwo#?J6-F9~pKw ze=NppdN(dHF`kOmyIMLF-y{V9F3mRA89dQwxTHMaxjH{a4c>!ON7x@l;Q#SwVAEKn ziQ+P4{@$&sK~rNwWaM+7!GW2nLGf0W1DyKve*L~DdW34Tur>p`dR9tGYNP4J98SI) zB8}-E7yhyW*bL+kzkmM@$gTz~&y8sQXzfLWHO`+k+4hDG@Q zBRb70Vh@k|eGd4unN(+Jt}>LUP=eLq1WnJ0<}{+4@L%)vekrBOvoxkj9Gv9;KEJkX zHCQ=WLqkIeiHRQr>d}e^5~WwH+lj+ZT_*bbTL0=`VjPK)6JW@=ySvwNacCDH_yrOF zu~A!W*xCEmplh>8-b(okkJk5BTl`6xDpno65dYW$ zQ6l$O*F0#Zzo*B49h+bm{tp}dF9Y7WLpNH!zC&-0lDqpBcIojOv0GEEQDZ&8+$QPOiob9&G=Zu8Ov?eyCX}C^pX_f_pugae{joWIi7# zsGZypEZ?qV(=Yq*=<1V>P};C(Q@cz<`0cnv*WX32jhD&u+5|3qUU7+9voC4Xa(^ za79^~MPO-pi~SoFBvzlGp`kf_x_t!_Mnr^!7TY4QFdlNiOCMgGIdcZOzPRfgpMhA- zPwarM2P@cRZcsy=OH6$IyzRRJ(0gE^tLf95FIHL;DlVQ7vVHeJyRW_dTSuZGZMImP zDlo2<%I=FNIn?v*`YQ4;NwPTS0nz;)gxDJGlshG9(*d{TqT2#(rG(E;f&^3T`n@A0 z8{Y;Z<`vcIe}auH#KQOWZzWcMgdjz^3pL!s)AI-(9{(qR5X##C{JlU?0**QS^cIs& zq!1ZooO5VTi`X$7QB8zJMPE~C*da0iuECAS`dSF7wu4*G^ru0n25PR#`>=E zAAb#m5dHiRdGM^?XBQXWaCbk?-UsZ8JA%mN(#k0CNQf<=qX8qeQ+Gy5v{O=tFg8B50wy{-aEaJu(NVkqvPTjs!Uw8C(Obc3GJK@kVZcXn*Qy4MJz1 z*{}CqkJCRZ6zeQIjQu-t`O>Q1eR(m3~~vs+y#}C3npLgJx;knj}z;I4{NH|?w_*VLjgWW%WaCrL4OP)Ispg~}qQh5(C&xX;dc z7f{GsZM*(bP9vNYnqw&LN6`W&SGat6=^;^V9<1ZJlzuKNJDZS#O z4=p6h{%lH*&|JG8gXr1z6xGxkK{L#_bZ>NYv@2bzJIzKzq8!9i0%Ax@0qp9vcXr{(yqk70SnYKkaP*mB=7*$MLu5RADykOHBSz&ndZZ%UV}3ZJ zC?dB335tAJFZs?B0%u#o(=i=8>R)JD+|B;z#y>6BmkgS`G=kfgoZ>qMPUhHyzJto& z%J}IX3R%9<0UFbtEV>ByUNP?C&XVkE-We$$l{>FY1SG)nh3hb`SOVL57A=T2-Pqi` z-u(Reb8PzUeL)MbcCAIY%z1!_87P=6IjV8#V$Q61JY1z-b|9`Yr)Dp3=sgBxt{!jq z23?uFX^p-hKrRNdW|YXRq6nZ%$RTR0_OiXKV7FTAFOCl#(qo#k4IvK5K+OcnSYHx< z>v2U7qEd_Xfl8>G~9nxsMjOP4_7FIy453uTASoEh8IJV7ssktqV``i5dE<~zB z)1v`{n)CwCOmh@veb^#0^Hr_R6%< zE2zBq)Q1f3VXYR>+}HBKCWf#^u7H8|VD!>+>D%^Y4<>kjlXW63ubCP1@0D=amtQgb*B4@8L-+rYPEYbaLXKehdnp|# zR{!HdH>?Kt={eq<_Nm3&Hx9yT{~4c$cN`%eU|%@&@7F>7_SXM678PtOt?Pd-igpiF3%rjO zwi{duup1p4yLb04tWRQlj5-3#_0Q1IaMa+MU6+ptuUR9;R|G^tafJePl1>t{@?ch! z{ow5v*yRsT(GF4S6;Sj&Jw4AcGs7#4vVm0qKIh@#fwLnUs1yb)dPc-9VUWNtmA?p* zGau_I83r6ZUauwpde?;e&Q|$TO`Zq;!`mj5Isj(a>b9>a?V${5%z(UGNR{;Bxf*cg+b9p-e z-UEs0zJB@?4Nifci3e8Rlc|Pfv|9kTOd++k{_BI?TrDj2n=h z0AF~$7M4+7fE5}q7v5Dz0#N0ndku-n+jE0aMY|9MENO+eSiorfI2~_lWnLzr5?&l);8Az+M zCW9av8V2j|oSmKPT)t5j%ihvaRD2Np?GVe@4Dd_{Rf2{BK{?LA zg9{t7QD{;?ZTZ+H@z6>R*&YVw8S`=mrcyPDnf*PiL}A;9)N>#6Nc9a^TC<;2L42Zm zX`-e=%=^1gf2K!;Y7{!^vNy!(W176S1$3}$5L{6=@dbVNyz-(ztF~|1hm<&#r8LYu< zRU^S`CzsO*Jj}(!bZ>H+wr&dx;!UBo`f*uLLO7sm6z^2v=K>VG6=-ix&~u%b<cpek-dy8G5#r4n~&HkdQ1*2t0sCHnh=CrbNy@1i4dd z6%cLn69U=qt82p>|q`dziv;s5qhwVnU2!&`F3R9I|B? zOH-J!Od`7unVgfdj3J>&gzS?oV;?g2<39KPai8Zt&%MvR|IFXN`F(%i&+`7fKQ9|q z=KjdzX{O>(0vnKsgKBcizXeN4Hglm7FUxP8Sw8MA6$CsL{v?SOkYuD~WV%YXihNst zSidRP^y-fD2CC08+cY?sE~le~{*%XxM4aDc{Nf7i=Yy2nmSvEo;r0HBfT*a&Qu||_ zCi&(7U)cN7F1bmc->IOw%iPU$G$l^Gk;x4D`o0&Giu}a9(NA#yz3fkF?lE7c56NbD zx37n7dwpj~*!lY5&PA4Q$oh}ZE3c3UIXIY;P)`$+WyG5Y;;gr@6*VxYHJX$*4A_zs zz-rV_545(yUCAZINswXV>;`PFz)+E2L?ic0f{11U={aaa&;^y1mBBCsSAySiaS6#? zD2F3TehD!coM>BiQCX|2$z!vRMy~zne(HVQPls~TDo^_i8MY*6?pY_in1mHZF%DEl zyl0b%LH%ftTCTcJx53=G^Wss$}c&tlsCf?xUEH57{&A~!1!G^VCkM|#fo zuN699HH#tc`H#GbbChG=J9q5B!{qBjnYf^NeuM#cBf0Sz=d|P5vpa)!rAS-MjI#Uu zYDD8ip;H8n#o(J-Q50-MgZ^e@YKmoRjh5P7pjl#@kH(AXT>mTVYNdmWMY__oQG(n2 za0#4E1&$%_7CiT|cvJv99J<%c715^RbddA@7c3n1zVj3R0lM;3&%S`bJADP>3aa~R zfoliwEYA9_+qY9r@U0*9>i9QIIHI7G^>4i5>8YvG^b*sfw|;8f_QXaN*~@c|;TT-z zV`zA4t*AaS7C3|vz2K)aPPNi!z19FbKalI1*`r}!yS;tJTYsS>z5c!Z;x!KHtwy4_ zm9!KnP~>oO-}93Usdc69B+1axHnOtz9buZ}r!p7=!K|v{UDCC1qVJGG#xE1!hhBA! z)6%!2@0X!St!%bwRdubbc7?%4Y5N$f=c=S^=*54SoYfR}jB!*Pl?vP=2nVd;28;4{O`d7A zcEQaF&Hs`WCpRVChok(!TO#%MM*m!PXEkbRNVO%w!!+UtmpSqK!OPJ9pQ-?FHF{*j4Sz$HdxE6Z>ZR z{@gOTS?xSNAc;E`v0*@TX@@NXn2et*1m z#OJ9v-gceGvqUK;&#ru)zDH{AF|n7X{4qEy5jw$MoZ3*ZtC08uLsqg1J@o2I^%AN#X)J*V(6BQx z#5{SOxs=J|`^>Ji#c-Ay*zppXU4vJ+b9{OA8N^y$K=K+d0W@TNeJ-tSicIT%mUXwc z5N~hw#g-;}h5UEDE7)T>#})AjM^qB%W`MYqv$CXF z(`Zi8C-_3#+*Jp%vb5PUbk4&@Ym6l~jEBusrp8W?w8A*keH} zna=ZvfD9b6U_wb}b~)J#%a`-*G0(?JiRf>r)p)e(0+kh(?diAOk%N*nAg8_1he|zq zQeMw*{OfN#w37<3+!+&`x*u;(Lg}=q0QJ!)MX~9Pff&$FAK19h_UENy3fO5)bs;p9 zIrWF&*mUcVq2%U{q+%59^Kc+`9wOV!kH)YXmN%8fRK5fNUfcd1NXz;EgfH77w%Y%Ub$Rt@Ki5pUFhz0Y@XqTWV-C`BqUuG_r*KF_@~_=Q)H-hi-g-J-|J`fqjh;)+!e^_To&zKs_O#) z%!v!DxTL%c_3y~Fml9EHp)Tl zuyI?`rxU*V@gRTinCzMG=AWY?2xJjL8s5mvZtF_cNA9MDOw~-_TH}&8SxgiFmImUv70->Dbyr8jRD}lyfG7 zr~~GChb3CWXIo9a&-5*{)<%C3ifzct3rdn(3$FX%$#4=3JwTI9V=iUsRotIaig;XM ze1dVYz`(jlF0G;>i&tFl__O5cVFG5xN==P{UoNTn*0AnyLy~0fr@0fM$i89pJ4C-7 zJu|j2p>j*LM~|TmuIstL!UVsG#&~jZkY=*IYltdx{uCNL7MWtI^__9>xs80cjD63l ztwn?lz|aWN>g5j^!K5iJ~lTX(>-YLs8^ zjcr-tN9zFuDUHfE)3|NIFL)aq++FGnBR!3cIb&1AFoKni`>W(?Dzg8l|fkH zDCkV_AQDz3C=o()g?gAU;>;6I#G|^-2gp=yN9>H!P=y~nB{PJp)jCSG9@4iV`!Bpe z^)@y(K1uZwXc9P=49_Nz_Y Resolver: set_address(name_hash, address) +activate Resolver +Resolver -> Registry: owner_of(name_hash) +Registry -> Resolver: owner address +group caller == owner + Resolver -> Resolver: set record + Resolver -> Events: SetAccountAddress event +end +Resolver -> "Domain owner" +deactivate Resolver + +== == + +@enduml diff --git a/docs/sequence-diagrams/puml/set-resolver.png b/docs/sequence-diagrams/puml/set-resolver.png index e344288ac7d5f62fee9ce81184d326f869d5bc96..7c9f8776d98417620065760be2a5cabcf496153e 100644 GIT binary patch literal 19973 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 literal 18222 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 W=4U*m`{2bjH)JFgB)*F2`}{xrGcwu$ diff --git a/docs/sequence-diagrams/puml/set-resolver.puml b/docs/sequence-diagrams/puml/set-resolver.puml index 8f98214..75242c0 100644 --- a/docs/sequence-diagrams/puml/set-resolver.puml +++ b/docs/sequence-diagrams/puml/set-resolver.puml @@ -2,7 +2,7 @@ 'https://plantuml.com/sequence-diagram 'autonumber -actor User +actor "Domain owner" participant "Controller" participant "Registrar" participant "Registry" @@ -10,7 +10,7 @@ boundary "Events" == Set resolver == -User -> Controller: Set resolver +"Domain owner" -> Controller: Set resolver activate Controller Controller -> Registry: set_token_metadata() @@ -18,6 +18,6 @@ activate Registry Registry -> "Events": MetadataUpdated event Registry -> Controller deactivate Registry -Controller -> User +Controller -> "Domain owner" deactivate Controller @enduml From bb6a75a8018554396b26148cfa6297e13c586bbe Mon Sep 17 00:00:00 2001 From: David Hernando Date: Thu, 30 May 2024 11:41:35 +0200 Subject: [PATCH 007/172] Update sequence diagrams --- .github/workflows/update-plantuml-pngs.yaml | 25 ++++++++ docs/sequence-diagrams/Admin functions.md | 23 ++++--- ...egister a domain.md => Buy a cspr name.md} | 0 docs/sequence-diagrams/README.md | 6 +- docs/sequence-diagrams/Renew a cspr name.md | 18 ++++++ docs/sequence-diagrams/Renew a domain.md | 12 ---- docs/sequence-diagrams/Second-sale market.md | 13 ---- .../Secondary-sale market.md | 59 ++++++++++++++++++ .../puml/approve-for-all.png | Bin 27590 -> 26288 bytes .../puml/approve-for-all.puml | 6 +- .../puml/approve-revoke-operator.png | Bin 21737 -> 26550 bytes .../puml/approve-revoke-operator.puml | 6 +- docs/sequence-diagrams/puml/burn-domain.png | Bin 22372 -> 24886 bytes docs/sequence-diagrams/puml/burn-domain.puml | 4 +- .../puml/d3-marketplace-buy-cspr-token.png | Bin 0 -> 54328 bytes .../puml/d3-marketplace-buy-cspr-token.puml | 41 ++++++++++++ .../puml/d3-marketplace-buy-fiat.png | Bin 0 -> 40612 bytes .../puml/d3-marketplace-buy-fiat.puml | 35 +++++++++++ .../puml/d3-marketplace-list.png | Bin 0 -> 26542 bytes .../puml/d3-marketplace-list.puml | 26 ++++++++ .../puml/delist-controller.png | Bin 8976 -> 0 bytes .../puml/delist-controller.puml | 15 ----- docs/sequence-diagrams/puml/expire-domain.png | Bin 24644 -> 33471 bytes .../sequence-diagrams/puml/expire-domain.puml | 10 +-- .../puml/offchain-purchase.png | Bin 30813 -> 32482 bytes .../puml/offchain-purchase.puml | 6 +- .../puml/offchain-renewal.png | Bin 25356 -> 30591 bytes .../puml/offchain-renewal.puml | 12 ++-- .../puml/onchain-purchase.png | Bin 44643 -> 46924 bytes .../puml/onchain-purchase.puml | 11 ++-- .../puml/onchain-renewal.png | Bin 28359 -> 42210 bytes .../puml/onchain-renewal.puml | 14 +++-- .../puml/transfer-domain.png | Bin 31661 -> 22575 bytes .../puml/transfer-domain.puml | 15 +---- .../puml/transfer-from-domain.png | Bin 0 -> 23766 bytes .../puml/transfer-from-domain.puml | 23 +++++++ .../puml/whitelist-controller.png | Bin 9342 -> 12762 bytes .../puml/whitelist-controller.puml | 7 ++- .../puml/whitelist-registrar.png | Bin 13188 -> 18953 bytes .../puml/whitelist-registrar.puml | 7 ++- 40 files changed, 297 insertions(+), 97 deletions(-) create mode 100644 .github/workflows/update-plantuml-pngs.yaml rename docs/sequence-diagrams/{Register a domain.md => Buy a cspr name.md} (100%) create mode 100644 docs/sequence-diagrams/Renew a cspr name.md delete mode 100644 docs/sequence-diagrams/Renew a domain.md delete mode 100644 docs/sequence-diagrams/Second-sale market.md create mode 100644 docs/sequence-diagrams/Secondary-sale market.md create mode 100644 docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.png create mode 100644 docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.puml create mode 100644 docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.png create mode 100644 docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml create mode 100644 docs/sequence-diagrams/puml/d3-marketplace-list.png create mode 100644 docs/sequence-diagrams/puml/d3-marketplace-list.puml delete mode 100644 docs/sequence-diagrams/puml/delist-controller.png delete mode 100644 docs/sequence-diagrams/puml/delist-controller.puml create mode 100644 docs/sequence-diagrams/puml/transfer-from-domain.png create mode 100644 docs/sequence-diagrams/puml/transfer-from-domain.puml diff --git a/.github/workflows/update-plantuml-pngs.yaml b/.github/workflows/update-plantuml-pngs.yaml new file mode 100644 index 0000000..861c322 --- /dev/null +++ b/.github/workflows/update-plantuml-pngs.yaml @@ -0,0 +1,25 @@ +name: generate plantuml images +on: + push: + paths: + - 'docs/puml/**' + pull_request: + paths: + - 'docs/puml/**' +jobs: + generate_plantuml: + runs-on: ubuntu-latest + name: plantuml + steps: + - name: checkout + uses: actions/checkout@v1 + with: + fetch-depth: 1 + - name: plantuml + id: plantuml + uses: grassedge/generate-plantuml-action@v1.5 + - name: Update Repo + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "Render PlantUML files" + diff --git a/docs/sequence-diagrams/Admin functions.md b/docs/sequence-diagrams/Admin functions.md index 97913c3..12a3404 100644 --- a/docs/sequence-diagrams/Admin functions.md +++ b/docs/sequence-diagrams/Admin functions.md @@ -1,35 +1,40 @@ # Admin functions -## Registry admin +## Registry admin functions -### Whitelist registrar +### Whitelist registrar contract +> As the Registry contract admin, I should be able to whitelist a Registrar contract, so that it can min new *cspr name +> tokens in the registry. +> ![](puml/whitelist-registrar.png) [🔗](puml/whitelist-registrar.puml) _used also to delist a registrar_ -## Registrar admin +## Registrar admin functions ### Expire a domain +> As the registrar contract, I should burn expired tokens upon request. + ![](puml/expire-domain.png) [🔗](puml/expire-domain.puml) ### Burn a domain +> As a D3 admin, I should be able to burn a cspr name token. + ![](puml/burn-domain.png) [🔗](puml/burn-domain.puml) ### Whitelist a controller contract +> As a Registrar admin, I should be able to whitelist a controller contract, +> so that it can mint and renew cspr name tokens. + ![](puml/whitelist-controller.png) [🔗](puml/whitelist-controller.puml) -### Delist a controller contract - -![](puml/delist-controller.png) -[🔗](puml/delist-controller.puml) - -`whitelist_controller(package_hash Address, enabled bool)` +_used also to delist a controller._ diff --git a/docs/sequence-diagrams/Register a domain.md b/docs/sequence-diagrams/Buy a cspr name.md similarity index 100% rename from docs/sequence-diagrams/Register a domain.md rename to docs/sequence-diagrams/Buy a cspr name.md diff --git a/docs/sequence-diagrams/README.md b/docs/sequence-diagrams/README.md index 73027d2..9296a88 100644 --- a/docs/sequence-diagrams/README.md +++ b/docs/sequence-diagrams/README.md @@ -2,8 +2,8 @@ ## Index -* [Buy a *cspr name](./Register%20a%20domain.md) -* [Renew a domain](./Renew%20a%20domain.md) +* [Buy a *cspr name](./Buy%20a%20cspr%20name.md) +* [Renew a *cspr name](./Renew%20a%20cspr%20name.md) * [Resolution](./Resolution.md) -* [Second-sale market](./Second-sale market.md) +* [Second-sale market](./Secondary-sale market.md) * [Admin functions](./Admin%20functions.md) diff --git a/docs/sequence-diagrams/Renew a cspr name.md b/docs/sequence-diagrams/Renew a cspr name.md new file mode 100644 index 0000000..1495fac --- /dev/null +++ b/docs/sequence-diagrams/Renew a cspr name.md @@ -0,0 +1,18 @@ +# Renew a domain + +## Renew with fiat currency + +> As a domain owner, I should be able to renew the domain with a fiat payment, so that the expiration date is extended. + +![](puml/offchain-renewal.png) +[🔗](puml/offchain-renewal.puml) + +NOTE: lightblue color indicates off-chain system + +## Renew with CSPR token + +> As a domain owner, I should be able to renew the domain with a CSPR token payment, so that the expiration date is extended. + +![](puml/onchain-renewal.png) +[🔗](puml/onchain-renewal.puml) + diff --git a/docs/sequence-diagrams/Renew a domain.md b/docs/sequence-diagrams/Renew a domain.md deleted file mode 100644 index c3a6a73..0000000 --- a/docs/sequence-diagrams/Renew a domain.md +++ /dev/null @@ -1,12 +0,0 @@ -# Renew a domain - -## Off-chain renewal - -![](puml/offchain-renewal.png) - -NOTE: lightblue color indicates off-chain system - -## On-chain renewal - -![](puml/onchain-renewal.png) - diff --git a/docs/sequence-diagrams/Second-sale market.md b/docs/sequence-diagrams/Second-sale market.md deleted file mode 100644 index abe24b8..0000000 --- a/docs/sequence-diagrams/Second-sale market.md +++ /dev/null @@ -1,13 +0,0 @@ -# Second-sale market - -## Transfer - -![](puml/transfer-domain.png) - -## Approve / revoke an operator - -![](puml/approve-revoke-operator.png) - -## Approve for all - -![](puml/approve-for-all.png) diff --git a/docs/sequence-diagrams/Secondary-sale market.md b/docs/sequence-diagrams/Secondary-sale market.md new file mode 100644 index 0000000..01e704e --- /dev/null +++ b/docs/sequence-diagrams/Secondary-sale market.md @@ -0,0 +1,59 @@ +# Secondary-sale market + +## D3 Marketplace + +### List a *cspr name in the D3 Marketplace + +> As a *cspr name owner, I should be able to list my token in the D3 marketplace + +![](puml/d3-marketplace-list.png) +[🔗](puml/d3-marketplace-list.puml) + +### Buy a *cspr name from D3 Marketplace with fiat payment + +> As a user, I should be able to buy a *cspr name listed in the D3 marketplace with a fiat payment + +![](puml/d3-marketplace-buy-fiat.png) +[🔗](puml/d3-marketplace-buy-fiat.puml) + +### Buy a *cspr name from D3 Marketplace with CSPR token payment + +> As a user, I should be able to buy a *cspr name listed in the D3 marketplace with a CSPR token payment + +![](puml/d3-marketplace-buy-cspr-token.png) +[🔗](puml/d3-marketplace-buy-cspr-token.puml) + +## Private actions + +### Approve / revoke an operator + +> As a *cspr name owner, I should be able to approve an operator, so that it can transfer the token on my behalf + +> As a *cspr name owner, I should be able to revoke the operator's permission + +![](puml/approve-revoke-operator.png) +[🔗](puml/approve-revoke-operator.puml) + +### Approve for all + +> As an owner of one or more *cspr names, I should be able to approve an operator, so that it can transfer any of my tokens on my behalf + +> As an owner of one or more *cspr names, I should be able to revoke the operator's permission + +![](puml/approve-for-all.png) +[🔗](puml/approve-for-all.puml) + +### Transfer + +> As a *cspr name owner, I should be able to transfer the ownership of the token to another account + +![](puml/transfer-domain.png) +[🔗](puml/transfer-domain.puml) + +### Transfer from operator + +> As a token operator, I should be able to transfer the ownership of the token to another account + +![](puml/transfer-from-domain.png) +[🔗](puml/transfer-from-domain.puml) + diff --git a/docs/sequence-diagrams/puml/approve-for-all.png b/docs/sequence-diagrams/puml/approve-for-all.png index 4bc33d9d5355d927af9fd1415731c8d3efee6633..77d163c1ce0262528ad9f52627741938b793e703 100644 GIT binary patch literal 26288 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 CkSR|9 literal 27590 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 Registry: set_approval_for_all(approve_all: true, operator: Hash) +Owner -> Registry: set_approval_for_all(true, operator) activate Registry Registry -> Registry: set owner operator Registry -> "Events": ApprovalForAll event @@ -17,11 +17,13 @@ deactivate Registry == Revoke approval for all == -Owner -> Registry: set_approval_for_all(approve_all: false, operator: Hash) +Owner -> Registry: set_approval_for_all(false, operator) activate Registry Registry -> Registry: clear owner operator Registry -> "Events": RevokedForAll event Registry -> Owner deactivate Registry +== == + @enduml diff --git a/docs/sequence-diagrams/puml/approve-revoke-operator.png b/docs/sequence-diagrams/puml/approve-revoke-operator.png index b4cd8e6f7f9c6d2324196d07a064198cfea241b8..448b8d10c865077d672826a1b5d60b47bfc21e40 100644 GIT binary patch literal 26550 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

pA3c0%J&wmQawYSlfadd9 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 XqVCg1lOJ>dI1rqkvF=lC+ra+<9S;v> literal 21737 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 diff --git a/docs/sequence-diagrams/puml/approve-revoke-operator.puml b/docs/sequence-diagrams/puml/approve-revoke-operator.puml index bf68974..2ead96f 100644 --- a/docs/sequence-diagrams/puml/approve-revoke-operator.puml +++ b/docs/sequence-diagrams/puml/approve-revoke-operator.puml @@ -8,7 +8,7 @@ boundary "Events" == Approve operator (marketplace) == -Owner -> Registry: approve() +Owner -> Registry: approve(cspr_name_token_id, operator) activate Registry Registry -> Registry: set token operator Registry -> "Events": Approval event @@ -17,11 +17,13 @@ deactivate Registry == Revoke approval == -Owner -> Registry: revoke() +Owner -> Registry: revoke(cspr_name_token_id, operator) activate Registry Registry -> Registry: clear token operator Registry -> "Events": ApprovalRevoked event Registry -> Owner deactivate Registry +== == + @enduml diff --git a/docs/sequence-diagrams/puml/burn-domain.png b/docs/sequence-diagrams/puml/burn-domain.png index 564cff6fecadddb840f53f7dbf672a6e156f3b2c..d9649d2460ede7df8a41d897ccfab9ae247344de 100644 GIT binary patch literal 24886 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¥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 Q1^)~JwSrr|IO`q%7d09^_W%F@ literal 22372 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 "Registrar": admin_burn() +"D3 admin" -> "Registrar": admin_burn(cspr_name) activate Registrar -Registrar -> Registry: burn() +Registrar -> Registry: burn(cspr_name_token_id) activate Registry Registry -> Registry: Clear resolver Registry -> "Events": MetadataUpdated event diff --git a/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.png b/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.png new file mode 100644 index 0000000000000000000000000000000000000000..1012e2f41388a185f699bb7814b60c3fbcd551e0 GIT binary patch literal 54328 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 d3: Buy *cspr name +activate d3 +d3 -> User: signed SecondarySaleVoucher +deactivate d3 + +User -> Controller: secondarySale(SecondarySaleVoucher, sig) +activate Controller +Controller -> Controller: verify voucher +Controller -> Controller: Process CSPR payment +Controller -> "Events": Payment event +Controller -> Registrar: secondarySale(PaymentVoucher, sig) + +activate Registrar +Registrar -> Registrar: verify voucher +Registrar -> Registry: transfer(seller, buyer, cspr_name_token_id) +activate Registry +Registry -> Registry: Clear Resolver +Registry -> "Events": MetadataUpdated event +Registry -> Registry: transfer token +Registry -> "Events": Transfer event +Registry -> Registrar +deactivate Registry +Registrar -> d3 +deactivate Registrar +deactivate d3 + +@enduml diff --git a/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.png b/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.png new file mode 100644 index 0000000000000000000000000000000000000000..90660abab0ea5907d1379bbc5d8ac6b7502185d7 GIT binary patch literal 40612 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�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 literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml b/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml new file mode 100644 index 0000000..d94dbec --- /dev/null +++ b/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml @@ -0,0 +1,35 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor User +participant "d3.app" as d3 #lightblue +participant "Registrar" +participant "Registry" +participant "Resolver" +boundary "Events" + +== Buy a *cspr name from D3 Marketplace with fiat payment == + +User -> d3: Buy *cspr name +activate d3 +d3 -> d3: Process fiat payment +d3 -> User +deactivate d3 + +d3 -> Registrar: secondarySale(SecondarySaleVoucher, sig) +activate Registrar +Registrar -> Registrar: verify voucher +Registrar -> Registry: transfer(seller, buyer, cspr_name_token_id) +activate Registry +Registry -> Registry: Clear Resolver +Registry -> "Events": MetadataUpdated event +Registry -> Registry: transfer token +Registry -> "Events": Transfer event +Registry -> Registrar +deactivate Registry +Registrar -> d3 +deactivate Registrar +deactivate d3 + +@enduml diff --git a/docs/sequence-diagrams/puml/d3-marketplace-list.png b/docs/sequence-diagrams/puml/d3-marketplace-list.png new file mode 100644 index 0000000000000000000000000000000000000000..5549ad5c54c98e7dbacbc1449aa1beee211c047a GIT binary patch literal 26542 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 d3: List *cspr name +activate d3 +d3 -> Owner + +Owner -> Registry: approve(cspr_name_token_id, registrar_package_hash) +activate "Registry" +Registry -> Registry: set token operator +Registry -> "Events": Approval event +Registry -> Owner +deactivate "Registry" +d3 -> d3: list *cspr name +== == +deactivate d3 + +@enduml diff --git a/docs/sequence-diagrams/puml/delist-controller.png b/docs/sequence-diagrams/puml/delist-controller.png deleted file mode 100644 index f0f21e35aafecca6c73dc014822b2b7a7580e374..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8976 zcmc(FcQjnxzc)$d!4QPeiIR}fdx;t)(Pa?5_udk{XY>{X(W2KdVi-aqdJ7Un?_IPZ zj5_K)&+~hp``-0i@4MD}*Zt%EvDY^HoU_k9dw=)$Q??kGhT>f?Ef@y}=dQAnf)-Fu z;NajA;ok!O64hP|2PzKFr}~~&Zti~0HnyHPiZ-q`FD*Q6teGtRnCv}0-Cv3G^13@) zxO#fIIP+M!xp)uuGXh;ab9kZe`A<6zF3^wf`|)Hmr;aB?ZHtHO9j0SZ=ZrKF#5v*_ z+9HT^@j;Ot;u&L~9~39MJ~|={XhJl1`r4^#hdQUGu5q&bj!7}1!?gN4g=nU$WvuB_ z#y4UGOyeA=3LJa(N0BBT4+%N$S$Vvp%qlp#pR+mA>5D2+)3Z!##*Jn%hVA8LP*XZ# z-lHEMi9Ng5rX1QnFHB|W4>#q7HH{LD)svkIFLSs)-0;#mM^Tk_IlSUg3*ot$wEHU5 zTEB>>VKZ{*6x$@e==AWJdy}?=sGG`LGADcUY#Et&X!EtRbm8^MFOR4+4-sZHx@u|h z12{3_MV0%GzNaj+bb421_o&aUbYmx{MkY#q29fm0KC#A0IKM$F_`V1-Uv&NDfr6#h z4}<87d3kq2r|wMcOds;jIp69lA`hBQDlWB|X<;s7b{rh$=gJDQFMLgRa|nIa?5=xz zWs>t($XM?wKh;AR-8)SxbSBmvc|<=UCQz-(0xpyhS=^g=k;MGfjE{@!{Q|F2M)x@w{P5AE z!>4zcUqc?gi2T2l9x{-q+roQ9XnsCZ%QtHKgjSpaRxV8#b06@2FcXL%jro6AYSQ4R zzZXde2-=^wz?oF6$U%%U!Sv+hDS3H`dEXAl?=W|;fi1zdj3u#oLJR{ax5ev>jPQ(% z=``N%?jJcaGT6Z!iA$;Uo^$X=v)1cux0ZXv$%--Mxo0`tMzsP0BC0ZPYDS7LFALY! zUR-}twXy-7qNh{R(z+=M@2nd$7w}%3+PvtpK9P_{d@y%)bu~1kHFLySFJD&`CSfmc zD1>)+cM}j01b)CDV~OM)7b(tPFa%rnJ$9L?iy~pfP_V$_s8Mm+>ayVNs>1x24XGIw z>`JoDIuNc=A}8;b2}p5%%O%(lIg~VAZ+}+{W~Kq+4zBOsbP}Zvhm55ww!duo^}QKh zrEU#DPu1+)(71b5O;qYFva0GTTcwuWm-6@79@8;&jk4whRbkRamw)?aJ$=?r%pfl6 zxYlgmKC-kloF(kk(TzsaJ7jbSd02WXbSXG|PSVm&57}?GcJRZds6)Q`9hT}WgtRUE z2%R_s|6r;%uhiwOxm@cT^%S4K#Hx1T>V3R~Ka|q6SQ%vCTROJ=k)_(%sDzE9t*VWI z?@UyoCYq4L#D=S?!eMeCDsDqu(CFwSs`GHeEj%LOqjs5Vm0|s2kZ2)tUxZV}XYZN4 zz3=Xf*Y=7<_?p#qNg+2ID9ceEBf7xVYFtYU!75rD^lIy|M565hb2!1=$WmsOJ9BmMVj| z=W7vIREf zpKO1WuC3WPP1+V(Uz{`pLqFKxS5SV|LrG}{{5U_BG9Q1(9irHWv?zL(;2+W*`}_|Q zV!46Gj~5BKUnLu}fEZ}~Ku!~$PNO}HZ!ORUpPaclWjt26RC?lLtfROM>$Yd=B?NjC zsq*PN={S3bqcwk&!-q>$(_QU`uAwdTqW2!O_#baK`7o08BI`nK_@Vd)Kc3YpfW?I{ z;EAf8Hw09xX0xAmBc??JUr`a+54VwHmqk-=v%`^hDcy@1FMG_CMH z35jDu?52+`RnJ>>|CY4mcSwn<^F2^W{XK_Gn~G-{1+#FQ<-YDQkU%JywgV%#KzR97 zNByKaY{`LqbziVsEs5aIqR@|4`+MR`jX%izJ7^iHBDA8o_CT=b{%l-&KwInMv;WzWmCM5ko?4EJW%>J0xa!^DOOHl z)3;l))Gk$9uDpxOWu+p^96B(N&xa6Tt~94YYejUnUJKt3;&+|9vt~i?sd;d45Zb

!nWV3?WykFtMNPh_0gnhJNIMiO__O~ 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 wb`ZxrTy "Registrar": delist_controller() -activate "Registrar" -"Registrar" -> Admin -deactivate "Registrar" - -@enduml diff --git a/docs/sequence-diagrams/puml/expire-domain.png b/docs/sequence-diagrams/puml/expire-domain.png index 46eaad8d26801b57464391e824c97a6eb0cb1a83..219b87c2379c2dc4a5d1d2d6c86a2aca319c449f 100644 GIT binary patch literal 33471 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 T?$`|J+g%#hbXAI!Z65s_AdLj! diff --git a/docs/sequence-diagrams/puml/onchain-renewal.puml b/docs/sequence-diagrams/puml/onchain-renewal.puml index 91ded54..c1b49e4 100644 --- a/docs/sequence-diagrams/puml/onchain-renewal.puml +++ b/docs/sequence-diagrams/puml/onchain-renewal.puml @@ -3,20 +3,26 @@ 'autonumber actor Owner +participant "d3.app" as d3 #lightblue participant "Controller" participant "Registrar" participant "Registry" boundary "Events" -== Onchain renewal == +== Renew a *cspr name with CSPR token payment == -Owner -> Controller: Renew +Owner -> d3: Buy *cspr name with CSPR +activate d3 +d3 -> Owner: signed RenewalVoucher +deactivate d3 + +Owner -> Controller: renew(RenewalVoucher, sig) activate Controller Controller -> Controller: Process CSPR payment Controller -> "Events": Payment event -Controller -> Registrar: Renew +Controller -> Registrar: renew(RenewalVoucher, sig) activate Registrar -Registrar -> Registry: set_token_metadata() +Registrar -> Registry: set_token_metadata(new_metadata) activate Registry Registry -> Registry: update metadata Registry -> "Events": MetadataUpdated event diff --git a/docs/sequence-diagrams/puml/transfer-domain.png b/docs/sequence-diagrams/puml/transfer-domain.png index a03617526b869d595639ca8a3142cf95a0520dbf..2920c24277bef334f20de7e1719dec2918e0b15a 100644 GIT binary patch literal 22575 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%0DF#WP)Zq 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 KDzDC%`~43mgT<8q diff --git a/docs/sequence-diagrams/puml/transfer-domain.puml b/docs/sequence-diagrams/puml/transfer-domain.puml index 98e1a17..bbcdac4 100644 --- a/docs/sequence-diagrams/puml/transfer-domain.puml +++ b/docs/sequence-diagrams/puml/transfer-domain.puml @@ -3,30 +3,21 @@ 'autonumber actor Owner -actor Operator participant "Registry" boundary "Events" == Transfer token == -Owner -> Registry: transfer() +Owner -> Registry: transfer(new_owner, cspr_name_token_id) activate Registry Registry -> Registry: Clear resolver +Registry -> "Events": MetadataUpdated event Registry -> Registry: Clear operator Registry -> Registry : Set new owner Registry -> "Events": Transfer event Registry -> Owner deactivate Registry -== Transfer token by operator == - -Operator -> Registry: transfer_from() -activate Registry -Registry -> Registry: Clear resolver -Registry -> Registry: Clear operator -Registry -> Registry : Set new owner -Registry -> "Events": Transfer event -Registry -> Operator -deactivate Registry +== == @enduml diff --git a/docs/sequence-diagrams/puml/transfer-from-domain.png b/docs/sequence-diagrams/puml/transfer-from-domain.png new file mode 100644 index 0000000000000000000000000000000000000000..aacc2b752b541d09a4f511bbebfced61c4eae3cf GIT binary patch literal 23766 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 literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/transfer-from-domain.puml b/docs/sequence-diagrams/puml/transfer-from-domain.puml new file mode 100644 index 0000000..3f99d2b --- /dev/null +++ b/docs/sequence-diagrams/puml/transfer-from-domain.puml @@ -0,0 +1,23 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor Operator +participant "Registry" +boundary "Events" + +== Transfer token by operator == + +Operator -> Registry: transfer(old_owner, new_owner, cspr_name_token_id) +activate Registry +Registry -> Registry: Clear resolver +Registry -> "Events": MetadataUpdated event +Registry -> Registry: Clear operator +Registry -> Registry : Set new owner +Registry -> "Events": Transfer event +Registry -> Operator +deactivate Registry + +== == + +@enduml diff --git a/docs/sequence-diagrams/puml/whitelist-controller.png b/docs/sequence-diagrams/puml/whitelist-controller.png index 19f373b09d24cbed33a56780e7b99bfb1e50539c..f7925211aca2c6dc050f2ad2f934ea9782f0f096 100644 GIT binary patch literal 12762 zcmbt*2UJttwyubXVu6525vfX*4$?s}H0jcN2L%CXp@RY{O%Q3)HFRl)Duf~k2_2CZ zO6Z}6BE9n#{^y+kjC1e1cZ~NO!(pIlpgya~h_hrf`jfmgL;IbJvsf-Nu^H(wp(AyZZ|_abDgR z&n=wXJsh9&SUEewy4xAR5O&YB_1*t@{Tu-p$18Q^16Hl+0om)dc@EaGb5uB)W}$on z0tyKH^Ghn!`|R7J?^af8utmRDu#d@(yf3V=mbukSxd~)8@i{(Ee<&p^PZ@wL5@7wJ z#`VD)`AJWinVEO)Uhh5PJVA%7ulwmjUt1O5&4|vQkDFN!QubviQpbcAV9dATCj;qtf)AH`?spI+WL@DQf*IARIsc>; zlC^zNCk??GYBHDi8v z2q+f69bnN0ml(buT*rTsc^`4^9PgeI^r5zw=?eC;KBdmg#TOUI^`I(^MA_29E)#mL ziRH|(>>^M%Rn@Kr#q5~(%sk)Nitq54<-Z3O8=TaP=Otw??XHxpdr9dE*{M}(Doz^j5mdbVRE&LGUg;2V5 zhhaZ{8xl|0!EFS_HZWBW|Oxd0N2v*@R#r7UtYfM6L zDP~mNfv)Vq8Rj$7Rsr@cCfv1~nT ztlc{4FpHU447SqI$lm@7oLo3hPn$fZuLa$sp%5RzEvkTf21bg+W-3Ip-o4A=P^1y9 zYr_o@qqM5hcwvY){r19QsXxEnkft0SU78S@`W9itF3JXT9{a}s>{ph|$=;)3#$eqo zmsg`xP@56R+3GIDpa1R-LPXZJF}+&p#}(Y_GqEFa40^ZOx;$7F>-n%;OQJ1;fz zwQRcO(3Iz!XZ1aip&OxR56~mMk0dU&nCXydjxRPlZO#>8i)w2hyW=q)Q%#gh(mT8> zqn=K^@QRx8kn9CivDV3w-oY(PW>=CljN@RT&A^ud+nxYn$y(FjWAVnQ zcM@g!-YkfpE#4_R%k2J0m7)nlu$FB&*DQ$ z%4lcO72ItBfq?Ju@t@st2*=&k=)qzW1*~eXR$y+js+)`R+W1Hk&hKY>bcN-dv^eULD(opL8a1`5($BaLsFdZmOF>H@xgJ z^Ldv1RMx-5R6T5CXT_HxU=Q&m`>{nx7=@W^ms^jNS&jRm?<$9Bfo|H@uj5Zn^-Pm= zvL6p7;XPrmOM6w}Wl9|=)i8S(i3@>gr<(Cn-TIR#b2 z&WKO{^YPj`)4DeS0VjD%O2h02iR_wiOF5Z4i>P;NnK@<+4}&jWGpl^=`1C2Y{CL$` zh)^j!*U|z{u1NrAK-#p&IbyzE4x)7HY>6ysS) zR=NX=Ib-}FEx~<5_v*R!nHxo_D2!s3-+qrQCxHJjb zF^1c0T!h(@Z?5_st#JJ6okFuyo+l+w?gn1qxmkYkLjTvnhTwy5-;#b^YKicDhH}#G zx8B;?Euo_lnHhC1gJz4vvQI3 zLTQgNs_G3KPrFWAs@Fn40R%QlhZ=fvv5rg~Q=-6*aQ5vO&SY@fFZG zyPakyc@!zPQRVNg+WBBoX)))zB#lCSM0Xm)lPz>@h3sqJM~{9qFHN_U4A)d~ZLbY1 zbA+IN&&+=v$yCVuDD1GKt`bp`rJ5#E(-F-LO z0u*1qxt1ciXP)~-hfpJ7+>r4#i>#!8>%teE#~#53K{d47PZ(|?XESP*00qcK2GF$=ZtO+qloVs zybd?#f@NP1FTE~-gv4;yAV$9c&tE$|O&(}A;5A$3d3tMX{wdwHl_b<@SXFlx+HL7yDc3ZsMZ+{~o zAV4cerFuTyHwz=@e|mB}RAOdUMr)E5-j{iv#?AxU)jaAboF*mDhQ=G}~nc zg-Nt+rie*%w-iC+Qk;ud#{Dmt4XEnhD<%IdX5Y{5SK^7sFbQ9~b^ofSgzIc8_)zYI9a-6_ z+Yhv?QcmQ-d;t+8bmsm0(Gs=$_WhS$rM!PXxw677$6ZtLtWTaZk=tkxjkeob=$)FH z!pxTSNK>dnDnu(T)lGa}V za0R?H%V`7CQWjZcR0U5>N(xh*o|%!OfZ!6`tUMcoaGyV0cq|V(|H|@)Hcti<3(u9! zoxOE=u*eO0{5Duw-9V?mIx{-DJdExl;{G$JPnkS ztn7J9s%Km!ezP$O8cASTuDNPyetv$oUCHsOsdUuT3$R^f`$!YGpO7Q1RTUX{lv!SDNH$kUI~g(eiJGxlJx6Gj zxH}SNOwa2^OnpY5vQYm)zi6nDwL@zE91fP!r=@22j-Z%m{?hPjG?4Dlrm; z;eJVt+z&%2%Uj`ZKKL_>`B3mpP#os{XE(Cx_+f2N<+6c@>OD2F91cUpj@TOEobM0_M6bk@lBN7vUk2ym(rcs6cz{P8{ zAvrxVr?nt>;yM!1bHT)<38gye8o%b)okuH+?0VAUIdz&?uh9yTp+8Y;tzr;XAQnC4 zG$_53v$9sZd7U$wPHY2X6>UK^K0Xcr(Qmn^3TlVQ1i_A7?P1-OUbp=X+`C&M*RNe0 zpy|`akBGZ$x4Pz}UB8~M6w8|ZIR1-1Vmjn9MX?FecKKX?=Hg$6_rSP6F5?CwLfgaB zlUEbo3?}E&MnptpA@Z$iy}&Ba($P@>Rw^wm&2AOW=`1@|d$@{>=hBn+ z?$6V7uKf*;=uJa|Opx!!Y}-fv&(f@{@`$k7Bdq5H(+kb0=xDUNZ*wT*sZJ!veX8yZ z8M8Vc4*q-~F& z;+3xsI6eTtrL3kVPa{@54y8xJB|)4gB)%S+9?p+T;4umJ=_JVZ7P)6odLf=#p%839 zje#JS^6rfrNHQt@U8;h=r`uiL7h_J3%~fX*ntG;@@Q$$c$-A7ML90lW%&R6Sr;}0- zrAP)D`faa+MccH!Ng8$%DW9$HL$@Vhq0$?EjX3UxR>ziNq2C-Zg$EB_`cQa#gN5vl z`<7rxrkKaa&6i7~qoU;f=eyHz@s_zvOiY%P`5`(-rft8Zh`LhArONR1TAZWa({?0m(@K$e%6u58{JNH<)$@ODrXG1UGu|sJ3Dx( z{5x7p50Gf<`)~Csl)0-vL|kcM8WzjZuH0;qPPw|TMpNUb#2xsoKI>v4ui4JVhAVQ@cyI6b%=G+FnVoumbhjLj^U_cWLwmH; z&Y7{ScZp1d`c_0sZd`)XS%~{=J>6z~BF4f(s1A?)@S)Oily%j&Getz5KL=wh>NXcy zQc{xQ5tQ)ZgMjZ2K3e)f@e7>?i_1xcp9e~n5~@J-?P09K?2~BBX||%TA*9B zzO1`>=0X&Rj>LYF8z9cRT64iZKYDxpDXpMwq&^5_oVrvz#_S&JySr5$F&!x{K8G9q z05K4?1pF^q#5u}t*lBRS44AcsGjn`TngkU9#i^-RI@(dx{L=^9%S-&Y_0B5OIv*$9 zy{?$l)O(!4K|#>FuF$dLPH?I%JhM_nzNomw6)_iKH#Oo3yQ2U()oNE9t6D01zzpE& z933cv1;5jQ$S4!nb0EGhHW#}AgHkz>Htx*g3r<+oTlmp`7{ObwG57@)_b4h=)J4|1 z{DM|@N&UfN(^!@?lS|dN1@+i?_~+f#(!}qszOuHp4cNyeZm@O{{$x;X`U@1=$}!o@ z04vV%|BV&@z#V`bw(j^10ne8JI(uZgA^*B?HlHwz<4`en6N;K__ zkboao#;OGqTD`ooIR3`0{{i`cG$g$~S^Mx)X=l82cVWt2*3QF6Jy=91U1^4+j>Lqd` z*ITH}CLL^T=csf8Pmew8W$uU55?T#S`K|!$3)~sDi?6uZkt*g^`Ft2&SfMJd=2XS~ zbaviy`7m<^=p0z2r`}*PS9GrVg;-LSHKbenCGgUK^+w{;wbPRxG#cI2wUV0=Kq~>m z13n#ZvNE%7V;To&!}W%;=0U3h0NuU4z3|$JrB&G7ebEg^;bFl~TB4Piwbp}xQiA+N z*lkY5COETGhA8->AGP;HnwGqN`O_G7261=A=2c*fkK@>1ajawgSEkQ~rp&>_JM`sr z0a`^F?^Schtip~iZ0@D}i{}alN!g+HXQ%^92Yh9}uK)f*X?e!Tc7h0fT;E=HTr z^XFMn;l6(Tnl9x#J}@AC-E2A2(&O^Em&rV)wR`N5MOhv8A_m zcHT%spfMQz7K1#`5T{r+b<{3_`th&6KF4>qTxCM)#{8^1!u|*Dz1oWE54AZzsjH}T z_NmLfW9uLwAOK!ZzPf+}`QFpNER1X1FQ?RQv~!8GO!C#hRt!OY zF7B~(^|ttp;LwkKk^!of^q6F%mds-h`Ja*(jaZ(dR=d+Aq$DK)AG()}w_6rqyS-0_ zJR`sx@b%-}iHOq@wsh#!2o1BW0Ewk-+~QoIdcd_fE^ecvZpR)_)o6Vs^1pbMnz5ZtE%ke4%6-QVhQC97ez#EZb5&tP zT_QX}EPlLUTIB13?r|F8SSHu`nl^A9aujMmyJ-KcxM(exaU!iqA%E^tGWwHXkS+dv zx_&bneL6ZIUCHD2%fcK#67*dTf3n+fx-wigAIG8f0w=kHu>u?!&1<($2X#*uaW;)Y zL^%Fls6IV8T*kht4hDu0`IaM{$ud@f!GCL{!T~OT#!&h;&MKRPy)Ds~t2f^U$XSk& zzT#o4gvHaTa*n!9BVjAD89&~VDj#3La$uO(g7@#))&qx;7vtdIU}QX}{)4|zk-v+g zN?+kS9gS*RTib@u_9aoGeQza%!}6Z+@Ik;APdmhK_5r%aL4FMFLqV7e549sIk_H}j zHJ%i4W$)eb-c0liI?{l8gNn4`=T8kuCi0@>Xl^;FV!vlOECHh>`Uu&=$3i7;1f&9; zSJs!0UsIWq32zVp2VKm?M11>tm$`qi(11nP%y&h&5T4tzW55o}ifW}(h;83V-P_-s z?|4m7`r1$Fa3jrv4`1c@({<}#0?GO8^D)55DG zvb<&&*KoKh(W&+IpjUw*Ot%Z20GDQFhU*p?f-EB#2OR#$5`@4*5R})iaNVp$ zJyY3?Z+F*!L2_TRDrJYQ^3 zmNSi`?Z5(SjHyjY%T%)QRipdK#>1nw#haD;>9T)NP!L}XI$8jD?c296#%jF<>6Jn3 zXyiRdcQIX$Nf(5=$d`3TCx<{T_f!}UOJPc8`BV?W=*RcW$PB-YHUXP<#@F1H|6F_} zeReX-Q~KcUOUa0ogoHU9EAAvI0dT;Spgt3dD{6OzWq1{vKVR* zhuC{EWE!;dpDg)wn%Vc~O)V~R)J#1D zxFxcfZPfBI8JttZBabqm-H`B@Yfo!N<$AzNH8bU>dA|HP?K^9>2xlR0F*F5nrzfXw z;U0*cMkFg7Pi2FI97k^CzPZ*B&&5{v9Fwg~6*;%Ea+`r6+NxM9H>w2{rtJHWgk^(M zJMYE8)-xlPtlV6g?S8GU6p_Hy>Um2`OTO1P-hTEzN)~F!NJf@zpBXaT<7%b+&qx!M z@ZT5QkM@4U(<5!o@wEOWx1%YK1QMHQoyNXd%x9=s=HvuimXrF#s=@#bX#)to0_a@$ zVz zm{f~;HIvvkmNu8E{q}&mpJg)T&EoYrDa9qA9z|eOm6R3%Q%WaUkQ^;*S?CzM3#h^C zt+cydvpTw(6F2X<+xDav6>?s651`u_3w;3xNsZJ-D+`F^lD1tR<-&(954d0d#^?p` zWnG16bArm$>+_odunmd#41(5MVyRWieYX}69?QBo+e*q`9g>0kuy{Uaak%U6X*nAi zf!E#9R==lP&QwcR!XM8^E4lCAzYpwAT-?wuJlE|z5yJ-&kViJK*$)=dP*U3T2nNgg zB+c^z7Iv)M=?$I>2n-CIbx!0l*OY(ptLuZRjkd+PbC$ouvF}2@x9 zNgqs{p5#8)(!5BJe&UYKXV{pp$&|-x@x18xXt=s>3&nuwoRR3!# z>{Ms35#}u|Emcbu{anbM3Z_z@B|qx}uICDanpxfMc&si^7~={~J<6XC3y6qRHJqLp z4Zjyrh@uM%4+r^B9{dC_$z*ANpSAHiz$Zlkg~->+&B@I*Dm>lx14(#zceM?WJg!-T zxv}YU*A#(eKKiay0PGORxRHfY#A2w`04^IxHL^nL`^?O;ruzeWW<(b+PQOG)(gf3i zN}@h^M8s(MV>b{H&!0aJ!s^{6 zK>-0kx58Dfl8}&)k|tVGsqX`&1&6~8{6)|D0gZ$d00aldv;(|Jb91F?;!Q|M9J}WE z%|T$}5d@U)H8CW}AFUwe`I0B;Hg{E*O*Prwb0YBUP@eyp^FSCDxGxfk1QIr#`YhPE z(8YP+KanAhzp^f$Nv6L+#AmX|#;7VPdI3#_@7A^J*H?j9WDl6-Eup9D>pw^XPxj}5 zG}JO%4#HO`9%w&NG=iu>%>i%#fu|>c#pnUcrWJ9z$2sA@Yl6QdQHNZUA@RX)+!baX zvf^sGkfwW#xy@((l08Gz<$QkCvp&{4tR!4|#W%K>Qm%?PkNcewjUSW+8!1{R`WB;TwQ1XrSmd)zs7y+U<#?{#f0G0=cSzp&?HoeE;H1AMy3| zjS#Th9k$D$#L1i~)O6oZ+Jpn{GdD=FX+4Ur#i-l}%mSF)04b`bAEG#6y`Vcg8T037o@7k}OD2L~f1D(VHi0`mnZ>C7;&osmrm+(tlceyvMN8l4ev&}Nxd zXQ}f0%>|VtKw%^G{{iJ7k|f8(FiG45MXxJgsX|J$H^+U~EcEf0a3If!bGZXn0?75m zuV24FWvhARQu8W>x@1fM8Yt%35Ih>hCF7rG7S1J5tPo8fD(LCy>DMwV1XNNXCK%w5 zh6qc!S%I9?Usrdxhs+d2;et(0)6HSbFi8H#a5(-CrkQ=w&IbvHe&OkrVxYMIvCNV= zvKbFBw#K3pP)y)Uqn_7iE8kqZb)8m7(KI$K?KX&Zs!;FoT5sx!E|S-vDiJYyTa;Xr zLvsB);l@M!neusNd6^W238{ut0Bk@ZV;^Kwv%FDZDOWEcfev~KCRDnbFcEla^4Lx+ zGWe)M|1=d35(_xF6{q}z*pH$T=Q5d)>Zziy2(>D4??6&6@*Yx6e-;BPn_@YKHKJIs9f|#aUe;#RvUOAQ7C4g5B0%jvCpok&Vo0t7O!@QkXPxBnix)2* z7$wD4C!|IdP5!lQ3Ms9_ep!;A&I48c3@RK?28UO{X#<{T04N7IvIwDC;2bI+S8m=s zo9k;jD?Lt7qzVLr=c`w*NF~?L#p-qc1B=in7|N_RXAr$XG38_J%|}*=&WtRsQcLFX zea|Rk%^pou8R>(d$WG-RH1I*Ipk=b*3D>CY%ZAbU8mgFs>+|AbXf;FbG(|MtLl%xx(jA#&X; zZU`l$osp4}&`N}#KPE#CIyShC)GY>#vp@<94Ilr!C)e>po%f_<3}bC z_1oVdy}iBV;yc;3!l<;m@6bEC#{wCm@~!@@=;GD;t8OU{lk+ZzK^KRD_8aXKxqB~1XNABO z47S>h?Yt)_oYdFXgN(VYyE`En_=GSZUBK`T_xDwk1aRrTt1*^T+sB8yW(@)UK&I{` zC>sHi^3Gyku1b;sU}iD^PHIzXYXLHYy|6M%hNwefmiU__BM1qvb#v>xvTmTH&^iIc zN=4PP+CYC4otP{50CFGsf*VK>>Kk=Iu|$^cZAi$ce1NEz#=zp8ot-)Cdy7<4?mwvp z$`L43fb{-4DJhyY!+$5~DKmWR>>ad-Ly%E1k`P~~dx|(IQG!mrBp`(L0ktls8lV?t z0f=*UfYIU*5nfX63uNs`&o$JWXqgky1M>=i6rg1BzNXD;sISirlnL4GY;7%L_x8Mc zq0s6U4EGHoOHZ)m&<3F5rI&s&u66}`%D)LB;|ZlYYPRw0SQFqHK z@6EwgUC^W;4#U^Hm?H6DI85AGk*IpwYiQ!!G#!NSooXUFGKXho3a*N}&W65yOI%7_ z1Yq3_ED!KC7ICv$uin1CSWxMGu+Z#OX3GsUuKT__1yfW09dR7N9g^IR88s~N?x(6f8@J7H1fZ+5%EwX!EumYzO1R8lan+3R>-cKE^Ze;JOc`V zI)EdBqEiC9rffJCh?hXu*Nuy20QGd|`u!aJ+oCVb0Yw3o?t7LZARjIy*K``D0cgbw z%H;=L_6VOHe0*qVqqH=xuCC)6jljlO^_tvqlAzwf&bxbh-MOHh1RWhnkkYXAOQ<*G zz_c!%9JeyM3)D#~ATBjsqF}2JNe1l>^?)esj%n5E7KvL})McN5_J9IVVFN;@LRYGo z5-?rRQGk?v9Zqd5uI8cM0*=Fhban;^am_|ILh~lSvcaNnD?1MsQd&atIg@>MqaIkI zP~FrbJhVLypf`qV=||H6sI-6bSo|gIIC6m{Um=p3C3&P``6WSi45Xy3&G`;1PrypW zcHVHUw{M-#wd12B&DamFhne0#8MMm7DUaW0-4dyfP7XK*rAHw@AftwJH1XI@T9c0^>doU#7WzLRpTn4WT`*jP0Dd#HEswR*}z^~diq{q|aC+Yl3eZmP$QO+h}O&(Kwn*_GbclB%OSjkvD%asL+`;+`!8E&Vu^ z3+R2>D=+s?5n1~v;+(&*GaGwM77FUY-s_EOIt3R$-K(p3K%x-hWj*^-r(kex*sc80 zTOLYIZAp(M^0U^I9X52a>G7PNnN9m)1P<$Y`gZW-I73ZoIJ8KEUg+sJOKYPmR=W%z z+n99*CKy|Sq*FJ^X%s|YMgs*y8ixMATSP;!f<2LPG;J89XGm@?n?2tZ`POjhOFx+& z$=`PzIbWTcT+@Zcn$!qG=*A#~=~XDFu4K|rmq&qZ8C7q1^jb{R^L~}kW|qetXWzY7 zSd~lp1Zh-7zaZvl2)9*lX#y=`%Dk!w;huQjh2Zq|cVVqcXI(=?iSw&ih36)%SEz~~ z2(aEQdLm*W=6|s9iZHi-`*1ff-|KC#pP0|qEq*F_7)y@usi9n zbidc{S{eVh2A@dm=uI9!ofF#Rlc4lJ{ko}*)d-|{1z&ZC?fjj54UxE;2Y^Ap1GAdV_3D+^;|#s{D&ICX`bk}MJ{ z+jtp)e5$#+x&m)-y~ON#5%h#khF~h{W0~ZRvAxDWW7n)11r&|PWEeUZn$FIGpa1@; zv}*k)QXftcR%W*SwZI8QrQuKYTgJ9x-Wx}t)O5xYKu;>KNzDxkirf==j+Vw^DcN5s@T1cKmrC|=ezs3fIU-wPz|b`B_;-|avV)aPX3Yyy|zRd4+e`BwAx+h z%~VoSYB%KS&(s0^lGNd$2ozM=^tT1?eKmtfK{o_z9O)22 zG$B*wcyU}wKz0KYD>J7!*lN(cA%+ulYG#`=7Xt5yS$4hiAMLt-_MVy9mHO{W=-<0L ca7uXIF1hFerX>OVCyR4Ra%#|GS@WR(1AnNT3;+NC literal 9342 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 "Registrar": whitelist_controller() +"Registrar admin" -> "Registrar": whitelist_controller(controller_package_hashes[]) activate "Registrar" -"Registrar" -> Admin +"Registrar" -> "Registrar": Update ACL +"Registrar" -> "Registrar admin" deactivate "Registrar" @enduml diff --git a/docs/sequence-diagrams/puml/whitelist-registrar.png b/docs/sequence-diagrams/puml/whitelist-registrar.png index b21c993093f76887c92916138cd0e6ba41154680..deea116d8c43c5f6c27cc7fd5d16aed72d8df0f5 100644 GIT binary patch literal 18953 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 literal 13188 zcmc(GWmuJKw=OCmU6PWDP86hDN?Hj4r8_3wAzdQfIB5_B1f;u5nn`y^2~4^}I?jXZ zTWjy{TxajI|Lq@KT)g?b;~8<^_ZS4pzm>$sc!+_7goOR(wb(l(q&uSE=Q-M4aKvA5 z!UFuFcMw-~FtE09u`o1pK$0}HGPKikFoe?RyU>_8IM~>~WM;Op(6e&*U}?c*U~TEx z-%Sl3VPdMN>hSk*q&wg_&dJN4W##U&;`#3$GC(xF?@`}*dwd{47^X8v>rOS- zl;wnDE&9!zvN-Q4E`LRW%e=AR&zc9Ni+Kb;tshrNqkgJ=LP>kot9Y+-H|0Y|gQkLB z&Rr82Nrp#-F=lj7Np%-PW*QDfOwP;rlHYB9cKW!CljKGArS~lu$;TJfk;=#fo1QPQ zy&m*@4%atw;9+l`!ukaZY6y9t=o7x2`6$msr*zZ7z-26Q&$MA_d*nikt$B7Rrj(}h z*`;gxk-2~JjYv!K2Pzfh!&J+wx*_VNqRGPD61~mnA?I;wY)RPlH`wQ2>6JXmi&GqA z5wIb=qS$p*gGS6Rzqe7p>~k6P(kgE^Aip9}9>o)MVa#1brZyYT+pIG{imO!^U!&)$ z|5@OLGV*5k9eS39C_}YID`(SZ=BGStFb1tB)w454{R=4$3pr>O<2FQ8w4u?z*!*yX zD6d^SO2>VXkXX~+hzTn?Yj1zK?@Ty$9w2)E`8#A0^ku0vM$~ojV4BD2H8V{#cM55= z5{Dm!aY)gipnX9WfBKqcktmWTF8mqZ-E=&u$XCy#@Rs#y5jO?{hC4P!#-)6G>~(x+ zbF2I={mF;2QwfJVyvB~)OHq<|z86c)BzVXR{*iEGJ=89!56e9$n{fP{ZCOFDYj+C^ zO|iDiy*-!H5Pqps8Xp=CacNjtS=qgNpO%&;JWjO6V;F?WeEFs1!__@ez-bY7*vRnk zN-uh&^M35FVxBaLiogXGS~L;Na#pe{MzI)--luKy12TB7U&G*c?g-m8l<+)4jk@ec z7Ul^>g&0Gj`KnRRevg}pJXt)G1?wVx7+(*CzuRYITK0Y2c9=wi*22oc!uwdiaa7gM z*V*#{xX~XK5)d!|+sKW?8?g4FLF*j+0o{P1x2&7!vi1Gz_iP;mEj!~Q+~vrHO_+z= zQYLHH8Q<4_r~|=&KF2A{L)0hJpD{0j?|V2n4E5i;fO_3LI=TSnK;4!l4h#-n3_m&C>MM<{iu82+|O5}YGyuBk2SDE+Bf8GO2l;W8T-JQJ<;O946Xn7jP zboK1&#!*DXQgL*6ZEbR9M$_{_r7-vaf^ZH4tZX{j#7gUV)|^`92ak<=<3H@q33!Tf z-F_fJZW61jfrR%eFo&Nm6^{y@51WI49#OFvDSJctt@*25)M)8>ID;mCN$y z;%UQXQPW%dpADNZI=PO{&cjS%5N3^|nz|X+*8d(?lw9!tat1nRc2$A#eM`&r5g7{BC4y$hDoR2 zulCQTcr_N3YaSwWF}bi4lLMsVnEd?w#Kpy_`A=nmudI1SMV{?*Ud-6?&y!hIXRNw^tiHu9%P4+u`8%E zeQOViYdY+A8@6+UElo^Nn4D^HV4(5sSsC;Wf{8Y#7S9g3FRub(n03-LYqA4ysbL8&NioLI8B!jbt`WJo zBE|ItILui0H?RG5oo#f}_4!T7C5aA&>)EnOs_Vvc3%!j|-e(CMrmpM5nIS|BJKM8^ z1H0IdJa=YL#_}de`5f)ym}W1ITx5AF5r{8=mj}`eI*djX#L-q&;^iQ8w^?E}UoW$Dnm3LOTzrK!o{9UVL@yc=grO35HMn_pL4rQ(GrV^=xYFgfdL;vn&o*1Z^rTrtErR3k;S!BT_}-f%r?4`WX_kKP$JrdrJ(A z6~g;tV=^)%sLjWqr&C$77xt@#Ax@oPh4?zTiaC^gIK}M(Zs9G^qrzVX+`xZRcrH%m_r5O4Y8&dQNZS4xib=k1&!h~R0K zOhQW>{cxG_KsY7eLFSHJBP4^|VzyRmD7_tIeW!M|U?#=y@>Nz1)y_wSG4ui>RYlYq zZ6=ylDKFX#YC}TW8%ZbYoOH&kdfE--!>UkavP-7g+Md|P@DSO+_#D=LG@{Ua9n;eO z63NNS!ZO&}lJh?M^d&yM3=SGvJeTD|osDaRIot4DLnjO8?_(?H>&uKJ?W+r1-;V~J zZ{Nxalz!MOTw5c0u|<93{J@y%{pQ;*wd3Cx{P^`%V{{>NB>q?~e2?^&nm^IiIjn2v zyjw0aE>jTnIM2YW^1Py(_wtgZV18RvfACU2S1FGP>vv|3chXFuR$U^ex#zQ%{Rpl0 zClE+~B4-Hm2c%7iko#$|)og8i&4R1kmzOa`mB_`R$#4;*IF%nAEOFv<2(C3GzxD)n zQ5$8+h!k&rsM`{@myEK4PvgV6Qc@mX_tW^*6gR3|I=Wr40Gd!ZpQHO7@_K#N8tn$u z?=7{YbVX{1_?SF)2#!tbg<>A<*%^IF4cwZvtk~EQv$wy`nES2Bqn?)cO zh-rSN3o60fgzV1Nk*K&XcgGMhDCcW8)Sk|+oq(^q*sfv#`%_^y_Vw#m{q|sVNQV31 zS7A^sEoQ1&?@l^3-^U`A2fN(=g)f!IR)hl5pZ)Dyxy2O0Md^9r0#jE)vURQV{`kjx zrglOy5g{63=J?d9GzB6rop#Q-=aXY%sRhm{o#ZrNZ`?yraNHr^AcbLCD)2`=HJ~=s&eB
!~=T6^Of8T88eie*NO%e(W_F{;K)M>lpsGRMcqf+wWM5zZ_OZ8S%~ zNH0*Ya*K+rQ`$*LNgq7;G>4h-ZMi3|419^l+TbHp`1e)8Hi~dFRK!&1b4} zBIFpnZuC0C)z&{KWnW#$IqY5!128C^*9N`=uSBmEl`!Sy2aL0^Je5_o#xg9DSVj%U ztMd<&7dv&kr9?^G)^nNCB(W+cb2Do{M@AlaP>nv2+G-Dm^O!_P&Og(%9Tx$9G`L>I z?6TB=tTZ$6VU17Gq9JfiMLWzPGHpPx#vAP`$qWt~ey+pT7OjJm4oRaRQW`GfVmFi}xa1&s`e zu*pf)4^`v&@t2Ds%ox_kDVQKj=Y47p1@GLpzL}dQm}|$sLFqrPXn%% z5sUrSX?HHnG2}A0vlxe8uEa%p*IAfYCVMKYZJDbjDRiCBA0r<3axcETy!^3v@GI+4 z{YvkJqtpE*wLM@OR%aR*8MHJZlAX+w%IAk@`Pk^FVl>p)xOE$(jlHzszUhGhxwTpp zJa&^onl;CZW6MH%9cLIVEv@ZWJXOuW46#S3=Uq)8vm>MGxUc}XQVxBnO> z3nOOI>}qQ9K~8*{coO&6H+4RJC_QaFS4o-_6_@fQ;dx&?>(bHs2q?(Js0A2(e2*XB z4VkX8mfStvTWBpY==40EGA3cx-U17ap;uD8)KB29F&)Vga63j|z+kYF3Goo(M_zls znn5A13;}=QJAGhGJ$Ogv+zlpT=s+!Y3GO3bvIqVi z{lhVS=DPyz@fcEXIRG!Jp;~*8>AT_2+1X*U(GX8>8!>LfyZ? zKo_^^0N6-(!lf0eT&)v^MSh$s8V2{JAm{cZpb{LI9Vs>J={pyK%Z7$SlD4RKYS0{% zXVGYxW5XdNdr7G;g^kC;SPt}~;8v(#l(<{ELc}3;WPe>koUmmysP=(2v|jaPq6NaC z>DQ~jE?zfb6UOtuWf}j8dO2`Rb*+0gf9%gC*F&@q4?$_In@K3v@@w%Wv|q4I^?fbd zkRWv_>4I{9`s)&aBCuZOS@}khNK3-Pl6U^Om{Jyk*23~1JeZsP>^7O<37hoIHMpH+ ztyry@lv0g&Bp=aT+dmgJ`S|w6Pzx6YF*pPjuxe(9@i}hse4#1-3R1**LVmzqyXs7M zH4-m!8j6WD)J|}1pREfjqS1x899lArg!@)T!p|}~9a3c=<>D%^-}0|;C}qd*u_X)= zYsqpEz~bGfMH)k_8_$dYULW|vN2iGHzSn#|Pr0Dhar>dpqX=hndgTe?Y-;Z$5eVOX zURXmzgF>Uzu6CtrgX@PERD6zDXQ`g&IiP5W`eO;F2rwTb;IPFHWEe_zfhr0mwUs;m09i)xd@W;Z%L1X}x}FL4 zb!V<23D=cif4nVEqrJm2w`2YOFPfiJDcc&futUj+^~PlQ=0uUC%S548R76ma9>n0N zhe;{wu{e`fZS>)!0G8NvrDaI?&-wYAmA)hkOpqP(REp*Ry~NY0ceeE%%U1)r_L45Q z@%ns|M8~~E#1BK&W3pJ!hfyEqHx@NtV{Z)7J^*n(N}$engnyjQBCTZV=wQ^S+yc=S zeo1w*Jw1^nn*=xtErGSRDg!^iWBGum1!)DjN4->I_=GI3@U{mHpfANHEOna|K`n`nKLKE-naWS zvx#?W6K{9Am}}SQwXFYlKLEefN)f*|Cv3H*9xQH-=6s^p(V15+P%mLw(FS~~V%?6u;iq@*}A#|yY|&8;g?;o1UQoKd}e?QlRSf{VVYGe7?YhyIJ>^%3LYZ*TU<&Yb2wRBk`l zd-}PQ&08CNl_G6yKlzyCWQ*T>s*jesV;Ddo5U~s)W^8F`kq9OI$c;}Z@`$kU_@{Yb zfG$A2KN~&jil48asdzXm1EX=G#KW!b@3P9Q=p>l8_ScO@-)9Bp#mBC7Ms^lcoEi4SKAJB#9if#B&)2FWcB$ul zt%4uYb^v1KY9+~9^+}a14sk>pvPSguQtgM$NJ(zsWec3HUGWw@cWn5GUOBx4#9mSF zv{ef6xEZ7{dB1QK(x2X-c4y$3m$W|;^>Uy#h)>P-XtdB+@8;8eTq8dVlkS8UV!;Uj>*j)$ zLztkQ^JT_zm1x!_fhSWG?T1A>d-+ta!lC9E&&r>v_@7L2WSAF!*i=>yc|?Yq9{N6Shc zqh8V%jR)NfyuqtFvkPhh-W2e0LY9HGMCL&pfvgKVr+Or#u6S=3eyR`vGlCmdJg?5t zSuq&jX#NH}^!NtAE`3L*{Y7!E?Y1q#U7SIKnQGf%C0~A{8q!;h!l0!C^%8)J8Lp{~ zyPA11)3nHiia7+`tO^!`U++MMl_Tam?iJ@sT^w&mee~_BG95v+4jg{XN=8NoFz-?E zQE*UD5Qv}4gC1tT7W4;@9~{T(EHYhx@9FEREF|_RET{U@yAu-4&_RH8M#HIvQW(d- zE8GjQwY3#N${Mr-%k>-oku?QEuygVH>O!N!%uk^(z|iCbKssp^{DXvqgby2|dWmT^ zqu&)+%wUu|{K>krn_raL<7zb-z9dRKB=6nWsJ6u9`2cYy`%>DWDOVy^}297K^>kT5%0P z-Km+2?n9iQ217Jmo96IwN5wynpL_U8#t}y%am%N8i0$G9M!D5&qIsQfLnORE%{!^y zcpwD@lUVoRZBmyJu9@cd#kj3G2DLgrWFZ`q|CE{~<8dfk8slFH43sL$mk#l7@zh`4 zL@|3EIg|B5eFlly)X)XAJ3#gOgvoV_Q9{rHhSr59Hq*Q*{#Q#gn_AG}>VUDa@nPn{ za;44uT^%XB@U#rL#M_gx5|g2HAjUQ-ij8E+&bzEqHYzsq>+~n{9u7-0%f_?l0etWN z#j^TZ?J4pfh>;IxJk20JeHXSinAQq%)ag5XyAF^e4=;9`+}zwiV0qnKUphp7Q#*7_rPdgoNO$9#Jsy)h-jw=pi zQ8whH>IkRcJt(M}qt|JykBd_g5%G~{ihm)n#h*YDsDh7=-+TZF7vsBcT_8xN(zl-_ zE47RPEXLc60HjW_P}2oO1_+Znr`_wb)l`M}q@?L|@enEjR|-Byi_6n}P@|stS^zrh zcD5V`q@_(z84t)y@dybO(?n3lhYX=mLV86s0~G`S)nKWiE~cQu0Xud3=+WHu$0EBs zvNPYrO#F_i(Pp6~(go}jbN$}k-b*0+s_|+JZRlxud~{}{itTJJWo*^M?Xe%2OyBMT zMnqvf&|fzxopGSPH?%R9cX58+BA2$;6-8?@HHdC5Ope<#(r{ows?|!|1q427S|K3Z zL1YsH%>lgznxo9oh6O%qIxdM><|nA><*(*XYS+`&O}~rzl|p06hzh7G$4CO-l2)v* zuZy5}pe!sbw4{gqr}y5)LlTw6?J@XZJzMMdIgFfJf8W~cLIc+MHK4Z)q@)Hnr=#Gt zSO%qBLK2crjHRU|R;ohv3i`_DT<`M>omuBkfweHN*ily(?P^+M8()PI7CSGtp;vNF zY6CRma=20=?qh?u8lP-z+P&5`$PDNN?XK-=rR#4qCM*bMLplYu=jo%`<>KPv>=f5v zY(usC)kb{}5hP5SCSx-D>5ThZAA13dB8lsvbWA~@XxG@GL_O21005x<@f=!;Y5>jX zA~K9sSbRjX=NeeZeDpgjz$E#M)4Ipjx$2NEhw7YhFDJcwBkzThD!sj4iHzD9j`FQhyM>u@rQS2=o3MpmwMPpDG zu*hS^qhWjU#CQ4q`}fk(&!S+kR$}xP;bdL5+CES((@DhNd+xWB_+3=R@0Us@WaI*{ z2XO0i3|wkKP2e-Y^Gb2vhqD@V=!)xUV>GiMB;M56Ewhk_>&zDGiAHmqkKg)ai+W4C zCVwb^lIB1}v3)HkbX9KCBvntjuGiD>%Asp=6ws$3EvJo9Q-BBZlW8aNY05X*)By%WMK52gx764n@v$wZD6hKS44n9zOs)_N3;F!B%QiU}pB0Ju|8-DOpz%1+4bgMt6Gyz@SYp=tjBj4fpLI$Uyf7p_Hd@qRPlk%@K;v;|arrw`V)9%KHHqFh=xgBpU zY(Cjr{bEBVW7io{9L3ytnhtorO{wee4Xs)Smz|nbAP3c(jnO+AYfLFEtEc~Z1>qyh zVy&Gg(RRM0wO?(!R6TFNP?xJIO-RuNHU6BKxUszKSExFJZvX7>quI8AJRtPPU{{VPb_ z%kDz@34;Fi*FY6ek-S|;OATobQo`28pLg((&=LWvMVoyAk@)+hcR1uh;@7QQJ4OW? z8kiR4U+=y5_bs=J{p(3rk#6dln!IV;f6CT;+p{`)6><`iD*bkhLYtkLTLo$vqdt)O;BnksCzo@ETvZ2X&ST#Sry}g0_5!{5Gn3A&d=zQX= zoAivZXJ%#w*pt&@lI7X6?>bGMjg5`&zGzyhv!+Cn$0pzILQC^#SLsCyj~ClR0K_J6 z>KT^Y=J81`89s1N)juopx{|)64zF=`OPx*F-9fep?RAR4`0M+-YP#jWZv!%u#AT^U zb*24#V{EF`JYO(oI7qIf4UZ6lDOW-mSy*_v_13h0#-2Yj$|aT^kAmWI&TUtzK)nKp z3Lu&H_gF`q>Hk?s#xJuJea0=HNAq4c9x2NKgMhenIB>{a=S26r1{GJGnfd+TsxOj?wg7H3{fY)=(tvBV$Dg!X;P4%#tLQb@@ zta9MQ#`9PZR%$hNPbFGNf5@fqgZ2Rd5O&IIT~jX0_?G`#Ml`#cRYW1`zuYm&xaKg_ z@e-8OGVz-1cQ5y!$C4f!;On&q6MZrO*w-#^^|@f(h?#o|;&v5_w17J|GZ?z8Q(4{& z$V#ODfj6?Dw;^QrI#ntsltX(uTU8$u0KWFDHb1QOjqZV+=#Cyew{H#+TP2Uy3S*i$ zz<%Fu4WsjejN33tqmHZr1{=#&YUOz>C^%Ut{5i=G350Cd$f=$lOl9dh6I!Cb zV+y?iA9`FapZ%87_MaQ*&0qQE-Dx=4nlkuj`<+*e*>uE6(cEGM%1G{Qo&VmfvYJ(Q zW{JFwAhtC0KM`L0*ktCb@I9zRI7N;-gNDlAF)AYTwInW%#HefW?PO3SyfFMvvUpoO z0Q)kHZvW2#szIlEG|qoZ3D(U?q_?4uzWOiszWtg7%}~W32@r#w1@aJU{saGpt=1zD^HCjK>9=oGuo;|yrad5TOp^b4f`Q(|$dd4Cu>aw)|i?5AHa z`-3vsJ~b|7`nZEDUf%v~%9eKbf24TbjwyhY3X(Q6&woOmzCF1nB47&5fXD%u4ovTE`tixLXPUXbNm=F-I}#ES2St%KdQe#a8%2Pe1or1N znC`hkdRz4K_owf~T>%s>F_3H=y+TJrgV8TE!n=4=Fo)Ab16t(lZmvB9yJG(9E>$Gl zC>^vYIL*f|<;AS5n5Yp*ASTO<`WB@rf7HSO8p#K+2XssI4n}j{pP5M`^>ih?K(=u~ zvB0ud13LB{SQ5~p;^+?s@9LbB7H$AAYYk{(^%FS)1CnvsxjH9i3V_E9LAZki%H+v? z4(Q*!=fyS#5xpW%fk4$zEz$RZKcnU_83dvV=<$Ri9W|Wn%#yR{zDi&-1U1?nfJNJQ zp488uhXGvM>e;CCuX_baLeGPM%iOjmOIj8IUK<((MGQQ+YA8c8;|`z~o^!Br&_E|I|6Mq-&}lJ zi63(SeLZ>lw8Cb=y`WJNEYgd?ibj<3G2C-(VuE{M5fdvkC`fqM zkL>rsa*vv~=Aod&T4Y27?s*po4G%y=ES!qZN92UW;a~t{a>G%t9dUEHDl~ZoMlcRv z+`PoCqvm&J$vX$4$k$sjYHCr(>&owhs07Y(3_1f{)I2sw41e@3cv<}l0Ew7-`Y=$- zY7IJZ5Jg&b{z@&at!gpT!oZju3XZ9P|JH7y^#Uqkbunl|fq-qD1M*s2!DPM5A<#36 z>qQP%BqjhQT08ujBCpS^EYl%u5C@ugJmzWY6=rKkLqe-+bJFrel$4CfA**nGaaQ$L z2%t?)E=E2QH5<==j{RVj)xVRzxw+Y5XqyJshn#2#BEOJdqS_W)A&r79goGK0iqN-j z`%?tm2CdTG*kh8$g6bQG!oXqOj{wrtD3CyCxww>P3pg1dO{a??EgDfj04|N7$0~~g zP^1A*27=j@Fq5mKam*?KWJn$7G)c`FGtuK;T-9 z?qn4fHnnaiR^=K96#@Sbzd*-8!?hE$RQF{c*Hfk{{5h!1{Ll&u_2~kusi~=WFyY6! z@9h?MTG#iNI?H|m7uVl=1z|_X9RIe|%8=;u!;CxL6~eQg#vBc%#>0(lVyC9TfTmhwyF)rfu}I zwpY|=z-jeSBb>6p%+Gkv`_3gepEk6VqZt8cV9BN1ZeNRevXIbQ3Lv#QMSf%W8DISY zsM;~-zsaRqzeRNi$w(Ytze9#}WKxQ#fGMNK3 zT6Lz;gU_`S^m;&V{kUvEu+Dj3zeu|QFu4{;nPYR(3`lBV%k2E%aQNgVATp6c&U?C` z_Lis?YSw^Eqnk?;KLZL8pz&q=b=-S!y3}IvdPQbtX480{0d2F_uhBFd_$*j?Ax4>< z8E$z08*?8$MZN@&K(Bx3|J6=n5fpbR(Qltb;sSj-1NWV!rB4KtI52WfGv9uKka$zj zi!LUu`z2e6Lh;_n2vYZ477bx;=X(BBXP%1%JH0fQdu}hlx4HR{#i+wCG*Gp-`|1+) zmjG1-gL3_Rp_ZiPumADrNN1hpe?2)u{|l1$D?;eH+GgSI^#Rd=E*ry4k%T|C+gMr$ zw1pl668HRlrHegvwR)vRjbYDt$-z?RKpM0y(AJ_vAp>GL?f7bCvZU;pq;XI8kU~a8 zg&EtW#Yomwjr~M>-IByaAhS~LXgKBl$;A|b2tj2rp@_@%kvKqidF_pgoj-t%`VLA$ zJ{bl?<-0t7hRIO}qdGqwRvNd}CDuEooJI72DEZB0rRjH#eQa1s%ob_R`vl6eDQt#Z zj|Bws{Cs=s+<60tq-2Q~)y$@btCR~~#P{VmLd*RGd=%K!+Di_Hw9X82-!iqcPHL~rSkt8O#FN*!#nrbFtp8H&h{vO@>mBJb-W|spOaJN)Oxr|J$tk?*CvnLlUA>#r&ZOAsc)>3( zKNKjmV!E^y(>Kf1Gh>k*IEu7%e7Y~^xIWzQF0qT8^?0jV848&XS>pir^?}agp7DJO>TW! zCdWLe(yBpxj}D}Q!x{Sl(cfTX3NR|-4g@7%qc^s8NxWu}_PygFln%K0xO>}OpwIQ4 zYw)}XC!up_M*~=gUWMr`lufkt#>WA0C!k&?Px=w3zxXQFp56JboE41j($vhUCgXj2 z?P*v>V{F%mp1u6zBS*~xQj)5N%1$d=JLX#-^NK zJlFpXJ<6!zPS$@hXi*>?=NavvBc0Dqa_&|0?F}Z^9h{T^z=9_ypO%#DcdM}QU9841 zs4#2QD$Wkj9dNMnGFj!E635y78Sst2i!B=-rZrYoq_fl^>*20`c7e<1*eg|(_i}sQ zE8XoRPVkgQP5tRxoJ!r1UtKOgid{NF)hBO_5GB7w5M28O93MMU_U(BA{_ zL@>6hx4$^)abd9$R^yvO)@tEtf0p(UK1#>l1%02s!>?Iw!%A-!bd>+|GfOW3?jJxV zYf=#BU~z#HT&%$Vyz{Rsflhldi=i?6d(&y_id*$zyhV-EmuCVG^KK34L`iCrVk{3e zoK>3e=?e%xv;mWfgM%o;Wo9a%^x9SWOxzzorU-LbC(k<2BEV`21)_fmO`)6oG|#*)YP3jkA^cA2>!ZpXXXqHN(D(>0Z4+Di-<_2u9rTNemmR*gcttouKAf%6t z<<@Wz{(Vl>67z|~gkm`nljVzb~#ud73+jpA)5}bWYgL&R}9u(vSGcY#{l9A)(Ap(rv(z&Nt z5D{g2(`aH7^_@0<3Sc)v?)C^bkgj!DS5}Q*nBV^_+WwpdO+{3T{jHo(olRQzt`;q$ zTIme>d|j;QEI1VhrkDHsJV>diGIy%vfk)|-LeZPrFTpss2>Mvx>GhQmL@vc>cNZp? z+Mmp6UMbup_f|?Oxb%*YkWgdS!-v^_6Z&nh6R03 z*`-88Nl;P!fxAWNj8OeG6+Sf&|9K2I56wqD%oRp?*?s>6 zg}{e~LO2ti=#CAzA)PQDPI?CdFgVkL5wv4bOpCB0@c#sF!Qg&mzEo0`ceHhD`q0_6E0-WhO^p?FA "Registry": set_variables() +"Registry Admin" -> "Registry": set_variables(registrars_package_hashes[]) activate "Registry" +Registry -> Registry: Update ACL Registry -> "Events": VariablesSet event -"Registry" -> Admin +"Registry" -> "Registry Admin" deactivate "Registry" @enduml From f51c90941c7591ac2a1888916866a682115c0fb0 Mon Sep 17 00:00:00 2001 From: David Hernando Date: Thu, 30 May 2024 11:44:58 +0200 Subject: [PATCH 008/172] test gh action --- .github/workflows/update-plantuml-pngs.yaml | 4 ++-- docs/sequence-diagrams/README.md | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update-plantuml-pngs.yaml b/.github/workflows/update-plantuml-pngs.yaml index 861c322..3010984 100644 --- a/.github/workflows/update-plantuml-pngs.yaml +++ b/.github/workflows/update-plantuml-pngs.yaml @@ -2,10 +2,10 @@ name: generate plantuml images on: push: paths: - - 'docs/puml/**' + - 'docs/**/*.puml' pull_request: paths: - - 'docs/puml/**' + - 'docs/**/*.puml' jobs: generate_plantuml: runs-on: ubuntu-latest diff --git a/docs/sequence-diagrams/README.md b/docs/sequence-diagrams/README.md index 9296a88..f1e4c54 100644 --- a/docs/sequence-diagrams/README.md +++ b/docs/sequence-diagrams/README.md @@ -7,3 +7,5 @@ * [Resolution](./Resolution.md) * [Second-sale market](./Secondary-sale market.md) * [Admin functions](./Admin%20functions.md) + +. From bee4886ac17144dab3937cb4ec3b6317df9560a9 Mon Sep 17 00:00:00 2001 From: David Hernando Date: Thu, 30 May 2024 11:46:21 +0200 Subject: [PATCH 009/172] test gh action --- .github/workflows/update-plantuml-pngs.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/update-plantuml-pngs.yaml b/.github/workflows/update-plantuml-pngs.yaml index 3010984..f78720d 100644 --- a/.github/workflows/update-plantuml-pngs.yaml +++ b/.github/workflows/update-plantuml-pngs.yaml @@ -1,5 +1,6 @@ name: generate plantuml images on: + workflow_dispatch: push: paths: - 'docs/**/*.puml' From a6b00fd6c88e3335877a534e638fa873d0035fd8 Mon Sep 17 00:00:00 2001 From: David Hernando Date: Thu, 30 May 2024 11:46:38 +0200 Subject: [PATCH 010/172] test gh action --- docs/sequence-diagrams/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/sequence-diagrams/README.md b/docs/sequence-diagrams/README.md index f1e4c54..9296a88 100644 --- a/docs/sequence-diagrams/README.md +++ b/docs/sequence-diagrams/README.md @@ -7,5 +7,3 @@ * [Resolution](./Resolution.md) * [Second-sale market](./Secondary-sale market.md) * [Admin functions](./Admin%20functions.md) - -. From 45a03cfbe04af68fe527eff77577481ed979a46a Mon Sep 17 00:00:00 2001 From: David Hernando Date: Thu, 30 May 2024 11:59:03 +0200 Subject: [PATCH 011/172] test gh action --- .github/workflows/update-plantuml-pngs.yaml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/update-plantuml-pngs.yaml b/.github/workflows/update-plantuml-pngs.yaml index f78720d..28a0182 100644 --- a/.github/workflows/update-plantuml-pngs.yaml +++ b/.github/workflows/update-plantuml-pngs.yaml @@ -16,11 +16,12 @@ jobs: uses: actions/checkout@v1 with: fetch-depth: 1 - - name: plantuml - id: plantuml - uses: grassedge/generate-plantuml-action@v1.5 + + - name: Generate UML diagrams + run: | + docker run --rm -v ${{ github.workspace }}/docs/sequence-diagrams/puml:/workspace plantuml/plantuml -tpng /workspace/*.puml + - name: Update Repo uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: "Render PlantUML files" - From d5fca2dd039741a9aef810f74f280fb4ef50e12f Mon Sep 17 00:00:00 2001 From: David Hernando Date: Thu, 30 May 2024 12:05:28 +0200 Subject: [PATCH 012/172] fix readme --- docs/sequence-diagrams/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sequence-diagrams/README.md b/docs/sequence-diagrams/README.md index 9296a88..f35b87d 100644 --- a/docs/sequence-diagrams/README.md +++ b/docs/sequence-diagrams/README.md @@ -5,5 +5,5 @@ * [Buy a *cspr name](./Buy%20a%20cspr%20name.md) * [Renew a *cspr name](./Renew%20a%20cspr%20name.md) * [Resolution](./Resolution.md) -* [Second-sale market](./Secondary-sale market.md) +* [Secondary sale market](./Secondary-sale%20market.md) * [Admin functions](./Admin%20functions.md) From 31f22c86425a3b52667c57155367665da8f0fbe7 Mon Sep 17 00:00:00 2001 From: David Hernando Date: Thu, 30 May 2024 12:17:07 +0200 Subject: [PATCH 013/172] test gh action --- .github/workflows/update-plantuml-pngs.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update-plantuml-pngs.yaml b/.github/workflows/update-plantuml-pngs.yaml index 28a0182..dfb6d62 100644 --- a/.github/workflows/update-plantuml-pngs.yaml +++ b/.github/workflows/update-plantuml-pngs.yaml @@ -13,7 +13,7 @@ jobs: name: plantuml steps: - name: checkout - uses: actions/checkout@v1 + uses: actions/checkout@v4 with: fetch-depth: 1 @@ -22,6 +22,6 @@ jobs: docker run --rm -v ${{ github.workspace }}/docs/sequence-diagrams/puml:/workspace plantuml/plantuml -tpng /workspace/*.puml - name: Update Repo - uses: stefanzweifel/git-auto-commit-action@v4 + uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: "Render PlantUML files" From 996b0bbf221129fb7b918a5e6d0e3d975e1056d4 Mon Sep 17 00:00:00 2001 From: davidatwhiletrue Date: Thu, 30 May 2024 10:18:03 +0000 Subject: [PATCH 014/172] Render PlantUML files --- .../puml/approve-for-all.png | Bin 26288 -> 23246 bytes .../puml/approve-revoke-operator.png | Bin 26550 -> 23427 bytes docs/sequence-diagrams/puml/burn-domain.png | Bin 24886 -> 21797 bytes .../puml/d3-marketplace-buy-cspr-token.png | Bin 54328 -> 48083 bytes .../puml/d3-marketplace-buy-fiat.png | Bin 40612 -> 35598 bytes .../puml/d3-marketplace-list.png | Bin 26542 -> 23283 bytes docs/sequence-diagrams/puml/expire-domain.png | Bin 33471 -> 29603 bytes .../puml/lookup-account-name.png | Bin 8951 -> 7885 bytes .../puml/offchain-purchase.png | Bin 32482 -> 28330 bytes .../puml/offchain-renewal.png | Bin 30591 -> 26928 bytes .../puml/onchain-name-resolution-wrapped.png | Bin 29634 -> 25702 bytes .../puml/onchain-name-resolution.png | Bin 18977 -> 17386 bytes .../puml/onchain-purchase.png | Bin 46924 -> 41548 bytes .../puml/onchain-renewal.png | Bin 42210 -> 37391 bytes docs/sequence-diagrams/puml/resolve-name.png | Bin 34564 -> 30303 bytes .../puml/set-account-address-record.png | Bin 25510 -> 22762 bytes docs/sequence-diagrams/puml/set-resolver.png | Bin 19973 -> 18245 bytes .../puml/set-reverse-resolution.png | Bin 20400 -> 17874 bytes .../puml/transfer-domain.png | Bin 22575 -> 19701 bytes .../puml/transfer-from-domain.png | Bin 23766 -> 20750 bytes .../puml/whitelist-controller.png | Bin 12762 -> 12380 bytes .../puml/whitelist-registrar.png | Bin 18953 -> 16674 bytes 22 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/sequence-diagrams/puml/approve-for-all.png b/docs/sequence-diagrams/puml/approve-for-all.png index 77d163c1ce0262528ad9f52627741938b793e703..ac88978c3f5dbf72f6ae4328c7edeef81846151a 100644 GIT binary patch literal 23246 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
;W8D19(+o1En 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 m=|YVCNxb+q%2E+!p2GadEimpdd95|o zd*)mDH_bIaq!-OZGxO|j#eXhQoxiwLf%))4`@vU<)s;3;%Wt?BhXRs09CaNAAK;?lWC82)=3imhDO3YT8AQ#_#8L zPrSXWFf^Dz@C9KUfAM*E4YK|M#r{f~_Cy=;EnF6Qz5yC~JO%To8bQK&_s1^wteobo z;G)%fRfDJuY%~m5GZTMfRHrAy+pt&J*N@pU zH~n?aPeJDrcFA(%o{jjj)*w%!8Yx4n^}3GDmcoMNH*I5sP zXcIiI5*pp&Puf(f>n@jC&g~A`w!EM*;SiUU%9_Do+}TeRx^2>Ja5!{NAm!Qv&f3|I z$`f8)?(fHKOnvn*wRA)J|kD$p7dr0DC98NWqp~tP3 z$?{lKbK>Uh;YtF}SGQyC-gr#b&rsj=?RkC!E|J{01N(P3g%c+%gRjWTT=z0vOvdyg z>D@azB`-VIjT;!)#T<);xG;bJg*!p4xy(tdZPQ25 zkB=sa+CHhm_W8kS0{QE;htr{Ot1s|*0)1)|F?4$I^&{9H%Kms2xZPd5U z)PSFxg}1+PA0F<%v*|D<=0Ot5P?rpm!d*uqnlgRoy3+bhsrIL162qf=dFr(y1c!Rz zy;m!d$k;P=6{XyLAG(5fc^Lwg;T5GA+KeYmIcByG6Ncik83Jb}Fc5T7{s*I;PlnhB zmT|edO^46GujZhAw3ch|t~YhD#mqKrYls`}sK0s-2}5+?Fl)hGDls9D#VVY_KxAjC z6$#|e1pRYOB7#^pG<)S9a#t;pKvp~mGqcUvjNsQxTn8yI5-+Sy<;3bara*$22?~VK zP8kmtLp`yV8j9>NURV~ZMIZ%PB)#i{YH1nW-9}-5-A zsbkDnsVceCtKAvn!md-8OV9G8VS3iiRPcXpe_nP?`=v%A@AsLO*3u)q*K4v%J+I$o zt3QuTPJX*oE5c?atNf8(Nb$Wp!oK;@lcV+2Q>A33`?9TsOr}+L*I$-0vA%%W**#en z6-Z5?DCx~#r~5IEd?Yyw^k}t7&1hJ3xAy&XQ%wIBN6@bu zU;5k-q1PDY)2ds-UG-8U*<-p9&#`|G<_%_yO3|>;JZfn>*2K?mclIzw>QH~UL=wr% zz-%@V9NQRqr7%7>Cx880fa@*Wj7;C}eQ&>|_?$noe9&*UeGl20QnmcK zD_B`XOw4Cvu6urdey2Ywf1Xe_w24C8Yvnrm-K7%O(zrXDv!vRM=c4JPqE8;)xg{9r zm6V&CGu@=w=r=dlJ?*!>x%Yj#DO!EEGr+@6C`LGnihJ#G6M1U_*Z$u3{CEWOcfO&j)+8TR8&3~sOe}Elt-n;2^U+5cl{y%dIVH1% zVog1xXZU)L`pcH+YIpzOyM7jpq*tS|Q`FpvS_R&ldm{n+=Hnmb?rtqb)P>-8CX4A& zl{^r(E76jT#N0kC?GO9$apV#%VR_;AJd?_l{T~R;R7oc1kJ-Lki-WGyjkhw`uflF- zV>l~^AinQY>9jE?KtpEPjdtVOH(`vscgT=X8uzF)8|T+t+XD>y_E8 z7+swEf3DQUT+8k#l_2Q&(2-L0@y4fG@ttAvj^REEPvR*9^hG}X>dyu1s;Y@RXO#CA z2j7*9iqxLc_L#2-tjnej^deJ9#2Oj9GdMWNr1)WBVf>op?XM4fqXKm zbqGTHuWfhNjxv5sHB_fCb*4xRM^PJ0d_>;f%^_%aR>QiCC4rFIv#old``|%1|EHWY>lW@{r^&pFM^J zZ?6e>t+e{>pD&H#$oCve6uMD!b+|kyf5gmlmkj^#!rIsN=dWMCzV_n`;dY9it&0*W zF)?vjqNb1j(23Cdi!Q;G2(xyc7Ly_}zm3T9< zzj^P-H=M9Wp0&6Qsp_I?g4cqxTRPpw%P68Lk)+tQjrnzkShWTvsSI==J|cfR*K4v8BS z+iGoG^4+lyJx8&oQfS_=T$%4;X}K9qld3aRz5CVZ=FQ2UdsRqePqE{0HnQTaQP~+T zsiTn&d|!lBbrTJOcuGzfxfaXBN=&pM`^+WpmG{=5pZSn`V?J~m$)Yx^Q#zpz0|h0DQ3GzXvV;cj z-AioEGL>U_tx%tubM%~-hdnQO@2|DWrDN{ASBb}rfBnV`Su_rzFQvpdJJq0C-`MxS zLlwy;V$)$xDCM&o-7HJ+jXA_PrgR7%0SD znB5>!{-g(#gktAZc>_-qX)-U5=sVo~pE0S77x9a^`I`Sv2O5%i|A%T%Wn$_lSVSzKGM2Ltc z^65tP`*Jt636EClqVyfcKdxt9;j6cAj64$>aIpFuLM$vSPUTJ{a9zIK-CO-yCiKa~Rg|*E_ny~u z7re%^QxCsIZeCWnfAS1%z=y1t5^iG}YTVe&jTGxJPs5bn^+Kre~&S&{wGG?*~o@`}1ru2cD)d!nApClj~6Z)+P4E#pxg zN;nQxrVoD6l)|@YZ0xh^nJZjb!9sQ`UPr_QO;vgxHN{=b`M9^>qOJV}la_70`Y2iH z0BV!czEx}A!FKhxo~7P=)|9z>g0rn5h)!(>2%Vgse6woVARG>znZxfN>=L+5_7-yT z?J_EAqLHcod$%lcF!5=xGs0dL)(bvQ^TuwL)APqzZ*Z+4ygT*gUm7nKYkzc`RrypcY3`H}W|59uGKLnXJ40zVKjc*qP_!4&#F?)hD#Pmd(jxp7O@I zy!L&$p`oFKOp0tv*ew^mwLNzBR-4**s>L(6F*^WbV%_gZuBTr*?Qz7uu&4iedztsv;_aiK_}5=u z)jBM@W$YbBV$_1#G=+eXM#aX)Hn|ZT@qKCKsir0&ao=3f={`H?BrE$sft{^V1C1B# zd*6_fk(GL_PPIQ5ikPIIi=q-@ocbKlp8X(rLncyR)JNhI`y7QLjnPZX4QV^ z0WJ-ftvX%JGp;Bv7v>*$e}`jirs1}Y!wILKlKYE%NI(Z6TT@cFwbOn4GQD!piRT5g{S|kPTP|5e5l{x|YUT=PpivIhjJlt-UnTdJ&e<{9| zGuzrfsQVfn{xxwJ?7F%7Hw*pUg4bXta`jbHxk8R^PvleLhKG4KApTL>da&Ge+AQFw zPFQ)kF6!2;TNgUF@@J=`&bWT)OcK4L;&6`0f2NeJrr`;XnPNvw6nRu3h6>;@s-*_v z7mG|(fMr<677_Yd8_jG4c~+7(ncV%&xnM2a<#JudJ(9Iq*`nz^4`mTbhXy& zRS=R>16PIH3ZU4+&W=}iyy!BsA>ttfYyz9s6e^xWWu`ui_>x;wG$g+}cX~-~{tEgRS3B=LH7tJ%cWP#cYY^#oE zSkGj|^47m%?!mGBQev-XdyPw*wUB9+r}}{R(xpq>+)mreqssGTPNRmewX-HBZp=E< zIgfo1sX-X=w*;s$%%V4Zn_x_#E>be8K-AU1Kq4oub8*x-;U>wm%cF z?|N~cEdtMLI!dUX@#|=g9?vRX*FFGQ%N3>nhLN?1iyd;ljA#m^2{p9 zCkab!mU=1u5<7Jj6th_XgteycXN?1@Q(0|CF=KSC2kd+*m^ z1g@g2B`H~%ohN^d0uSB`B+x^*U-c2_)~-Hc#SsCOhui{s*QYdM9=25z(-+vRh-ssy zAC0V=g+MDwVbK)b>;373T0!E2``Ut&s?4&eu&}Uv0(c9LN|0Y2#WJAwi7qp;?y&+^ zi_JuBHqxXnupMsSQg#)^ZBc6tE!&I{o7I!clik8uYRVrQ)DX{a@SQo8Cf;>(f;VW>*nR{xxqVYD4|u4b;>VC#>6=H=g}~RoTu?# zYhiUQjpsBdf=XuJpQlh@ROVzWXwi7CurHQLNj`+_$8Z^XdoVCC=x6EWn*w)3?$|T1 z#HT8Hxys3rHPSHGwAi*A0Pi^(QGPx?zE*EHbcOVJ4Jd`@!^(p?kym2Z=O78XxLgv& z#=}#1P8V>{9i>s^ZvAw&es<|Vmn~-+>9sXza~aQ7lWRPx9RHPG{@Bm$@zkUw-}%oM zwMqbbZ7mHy;W8q#Z>X;ieL-1y`{|{dCq<3RT^LZ~zUz3XD_5?h|GeEP5rVL~g4z50 zo1U4U4rC_thVYvaU1`Rs+uu5Rla$M=KZU-tZYOG&{JC+B(;wi*cCLd&s+i|;WO8I3 z4F$#SY7?DJg@4b6pp3th?WJqzC}XI>?|Qrjt*B{*n^h8u(M&h5B{ymP)VHg!GOniS zBiWjCtT`u7or2km;``B-$R{j7cz5A-c0uUvV(I%Qh2y`qKM$FZ!@4C$c5q^u09-nP5%zh2Xf$ zx%IstpFHh&K5Ld6STe|V*JfHC$IwYFE3z7h^0j@g{y=Ixijym8UXMkRz-bUSTkmuZ z2d8#Kd>I^s} zc2+gurWL4CzdAIROhp-p^rLwj$6&P-yhk$iY9M~?{wYisj0qExSy&s=cEd8Kw>{w& zJRNSvHEeR@8oKJKk|vxuyNqmPm7YInZ&V$)&_?9g0`^g+=z4K2Tf_E}O$YU90C^QY z+soTyKKQeNfu{@e9+;*Y>=8e9&q*ve`B}))@>T8I;Lr)}dUHcV!vx~n1xr`E(iL!f z0L621kSAj~*w}8beYBw=FEjs~c|};x)O-G7cg>`eFBI~tP-28ob-{S8MJfi@C!HLQ z4u7T>QdWu3Yq6Pr5Y`@wAm?Eu3{H_hdPIryR661Ch4*^BlTyX?*VMAk>fquJ zeiB~ZaBXY=cZPtFkfBfK(Z*|`%U8;tVaqX&zQ02(ch*{Y zG9r}$v*zf&WvBd(_eMxF)>X)^M>%(ShR>>g(YciY`3Fub_`eHwS>4WthM@qTUuPjcMkG9|a*p0X5WKHNGOBZcOL+F2^* zgxirAeX6*#`PGM_HQqnML?(hY_zAF2c1X>JJ?Dy(++<;y*X5gRdCZEb@9Z3~Gl}WC z{UUY^Hb>m-2DO8h>R^=yGheaK-SKxt5k{9Chxq4CG}*%N4K#izMj_wjdTu}%HS7kL zugN@+=EW?Qr;t_3JHf!H$7Oe>CD1k(9rXRV1`il{d^{954&a zDpV7unmy+0#qRo9Ntc^q=&Fwn_X#QZZ3#4VSG@>dKYsPrq_T8iUiqf{>HZYkFQtyd zfWRhHbn~RoTuJqY$hOx*;ZgESW4x5Ea2kDY)0xtast8W?U2D;l`q?u{y^%-pcah7i z@9348H$P&)&=sp;(O6b2p^H`a_%TKkVgbBhbHJ(GbUk&YQsU2FzMRTsW?`{5kYXc_ z0FI07`vQ7-nHe7;rnsQt9VpD0Q)jdqCPuXGW%(BlubOV6S9)yoPa&x3tC@>PpkWcU?KJ=G5v<_X{NDSVO{3s)u#D0sGFq{e=kY%PJLn1<~?KVpv+9> z*@(8dH(gy<+bJH3&Cbouo!}5QXdsrp-;Cfliyedc%7~F<_g3V6aF<;N$Jsks53T$j_j6T*FU>wQu306IV*o_VGr4BBUWu&JUZG5{?iPPV-Y#G zUCvgn*IOnXwT!?naMWZTStjAsU#Yo&>RI{Oq(JC`lK0e`qcW^LiIYMAQn>M0IR+K8 zJFgCf5mw(^ooc`k8P{6%XR~sycSHbF_8bl6$CgS+Kfn3VV9%;}5Pa*)%Sq~CfUc#r z9BD|C#z3WMC)GrPsqaq_R>Tf3Z@fUN@4V~!gP$I>lN`vP0FLGx_op|#BpW6f$CX!Pc}5?uMl#qxhSHGG5|aKjP1DON~??ps4d#BPGj!?TV91u|53B7FTz_a%|#lJ)ZWSS zSsyH0;(%9RGU(Iw0)}|}qn{WruN%~MGPAL&((*zs04SUw)j2U0ljcpwzDxGvf_vmY zUK_3S?2Uk=^P@W>M0AQn80iMYd6y#9CbhSAa5RTr-Z=pyw=y3ACDgm}?h2pb&#)i> zr0g^DrpE>~e9!R3IFBjc1^yw5Qh*)6l$X~ITp_>G^ZFVrne^9_R-w;PK)_+1ITO#O z#mLTXx4SmG?Ve^1P41oVeG07u0|Ujy{Dcnud85!``D`r$0XiQVij|plemX-jYTgwtW>nY|kQ3Jb4PEL-nUVxaG7-r_V-~N`#d-p5DTIY#bHH<4g9KF3onb!s^V#4V8 zuLD^;R^^j#TJ`?QW0tOQAWddgPoBYXhm`AlA++a>4u`0ysDJ>esWj9-3_fZ;>vMT7 zu@ckkAAD%su5>tBAks-#|^CM)G>xl9sN4-d^6| z9XxzIj~VTAPVbsw{GMCgBHG@~WvyG%b9eF*pDu0Ll`2T)z2}&_AZ7`5{f$B8Ls;U2 zQ+zS`_qF?c_@l+X6ck)CW-j+fP5{nvb(}D-Gb~rpl7zmbA>QZnFQJ2|B2K@)r2nmv zkk;XH<&UmOU_NJEXW!*Z_-xTj0*6p2>^vsUxjbG?_k*!KMe1Nh?sNzql`b%R-O@M2 zFv5_ZB6vQA%4;Gw6^lp2E{nurvsp0*&+RtHGBM^2Ry`|RR5AFWJgD%|q!d#&|8}LA z%)6=u$Jm&hc^m|vlW`BBP?y+nSip_1tI$Rgxhzcz68E3~PqwtN=RWUP=*q z(xL(VI&MJqK|DZtg!C@4&jSpR*A9NJ%Q|h&3mhm(METRga_e?V#QOB<(_;R+Mf{jTrEqx#N1y~9&8 z<*K;}H-oTn$W zFKr~Gq(mq7?$b{QIYGk;_2AY>u;_jE?v56 zsaQI}>oio1=wml1vQ$yQAsSfd%`wXDA7cV)8!+02E?l_Uoxn^>Ow8vpA)RGp+*0m& zzJQ3FJX<{Q3~YOat9R-1gfP@YN?*`z=V%@xquu)N@AQg8ffR^irQj^2`!1W0I0 z#oj=79g2%Ea*w|L*02OtHaj=xMVW~=X06k=g|K7tl2D*S)G7qly+f3+)fDUUj{*K>J93sb=Oy*qY4JC5=*`7%ZZR7Xc&ZVq{w zs4&4}+&Jvo%W3ky7?StG7CDcpaiMw8Ootl&E>r`W<5aP=_(a(y8CfRdt7t>s zZt|wCT&7&q5u0`qW$s6rgEt#(lX6$lvP8pt?S4V)hr8?b8TbOt<+0v!eW`w1i7!c_3&S!mvpfLXTB*mHg8a%YH0d?22%e2+@}F@B(G4Ui>z zjXtKZvq6D*>6!nc@tuv>svyuxl1x^zZSpg%Iyt&{cz8j{u$9?0lkWcFz@U=vWAP{{ zCW%DxlpUR93U}9n_a~{uo`%cD3g21d%Q*w@}K6~)}9eXI&FZv4# z3NkY@m1yr~LQq1xLonX{$X?G>HS{#xR}71Z3E}iP6Psw}@aMk$q5eDL$~8k-W`GU0 zS5#FaLPMn=7X57YNNpQAN^q*aTVq4<6x#`{3V(fnV3{e=F_|M~Iu10rk&7A6>7-<2)H zZpC%tv3HpN8dI;_`Vn;>C{92tErh0(?^ScY52yP1`~xQQ(_4HnQJyeo+LZtsA*@Nc zjfKU<4?xXf^jhe7O~z$Ng3!)%n?+FxI!IgYtW3(t$XrxGhK7e50@Wp9qR$D<%u-jH zTxdM-4xoLU|8y3QvJI*`{~Q1ZZS6R=?3XWDSXk0Qo2dj~0sx}exWWx;H83y4cn(VB zQA$yiLH^;S93E>kR|rW4XiRc>y*K7kBz!;^6J=yHZ;89exU68S0hRIzQRrp=x=O2 zxdwcfE)@WM0dZ>xZOE3a z`>9~D0hIFP%a_%|Rlpqv4qNwpjVrHh(*F)8^rCiu$&=0}D_gmF^JW3Ie8y?`op|?a zRmv@2@FDT(Bpte|p)Iz-A8JdLGUM!cE`%Qe;?&W^Lwp=k_R~x}Chtj7*rD%B61nX( z_JM+$nlsM)bZjP=Wa!v5pI*XnjX0dM9fA6LBxQHrJHse9$NhVsdVTf&vRHk8zS$4$ zqo+$y;$vwd6gFue#n=zW+g$!)jmFwiikg)tuW&I3?Ym;lhOwqJx3$Sz_P){42a}Oq z6!jxM!;LJ?Av$rdtDLfG`o{09@!ZcL@{KEsAOTx6M&74`PWKAGqEj^g7xVc3dl;wc z4FQ!AYxhx^jOs^?%_aEg?XGu9#R|kw3ZPmJzjY*25fW<=cH-}ono5XeIUB^Z>L}oF#5{@grma4(vDUImw zn2;*U9~xJBmq0OokOJP2+kl-{R#wQ(e7nun*{7$cVLW(CL|1c;YuVm5Axkf!C>?W}}#+E2qk1 z$uJ%|Z4x$MuzMh#qXDy*qN1XQM1)SGsb>C=ZDBg<) z!EdI4@o=eZoRJqa-a>s)vx=-*!)?gvfmndek}eJq9mwbKqS5Z&D1o`C^CFUK%}lVx zWTfD3KmaC(iY?Mjp^G#nlGA|q;>9z>IRK>_tnuffI1=CRnE%ouLR;o;>CxvaEO`Fh zyW`knE<^A-OVn+9*(9?!Tt~pt+WHWtW9U`oKs0xghkIW4ntH4pdddbQ^iaM{6yik+Df z#m8kCkBvcLfqSgB*hjHAE3sAt9;fN4$NiM*W6>IJ*vHAgfi+*?*$0~B86r?8zGk>W zb>Nn~`?h;#Y0f_^QIHS1W&f~1Nc<6+ruO`I#on8l{~iwdvWC5HJfMiWu1+bSr2%14 zSJFR2U%g@n8r}1xBx6V^t7Z41q+1`#$)THTn-t5nrN~p9SUGfdR#YkLK|bA(Fr@-@w{art_h$&_w0Io){Keh%uBf26VRD;@1=GzvGo+;se& z>G|J}#hDah%PQ}Sd0Z$WczT{8c=QWiK(g1;(gM|-BrjJxD;ztKcl8!}azCXZL&;myBA}-FBehW(YoApY9Aoz`l?A(v5p; zn$P%eJq-uIG(OyS*`rKLBJlm5b0-o2R_OGky2^wJrSKlNeGxJ7)? zqDJYR$Wg~OIm8bj7)1Y#DnRe%cDM+xA;7{z3m@c|W}#G$8T~lvJv{dT`D3gq2XB7D zvK6|%?YV9_syn|x23k1`Z9!v{22xrQl48piBIY>I%XFupeWsG|=D)80tL^7^xj+Y! z#^(XhU6RG`u7UNAM${dv@H4nvp;t>&2iDirXQ||fs>WQ#qEOgrq#Sx%bIQWPLJ;ZG z`_hn0=WiA!hA9M4CC9G8hYZ2%m8ndaxd0HNV9q(nQ8nTYFVHh^S6g^o5Fdaq4W0mB z$mLX`iz@O83S4F%jptEUj<+XEeGD2a8C7|20)PN^F&jD?V4+p0K#!o;C zS}A`^Gmr&zK8u&FPTC>L90uJgNz<6s29^n)C4!Trm2p(D0@=-=HU#G5Q<&$^Q43#P zyi#d&vn;D&$nnMvdX{P+c17fRd#+$qIyOhKY9UXj= zQl?$aZ&;v2PLgPyd5*5aNOTpx{?@G8lvW7`F$E-yjPK#WuDR>jhr9YC)d2y3W=L34 zu<)q_a{;BL-=6@lACpqF{2?2efHt>5(TtofrJ#dtH=S(mtG4_C!T-_$){UX3=_fRJEU(a!?VHOTc*lqf~hlK9j=EqFtKQxTYvG817nc?^r^O6>ay z1`91P?Z~+d1J{s9=#CV9$=7cg%8t_^C?wrRwDpSl4TAZkDzhXGq#e3z%V;`a+pG;o~+z%>Q%J*m6+ckctUIaA^tN`j9gcKd4^ zGzHX+OL2*bXpCo{u~qIqPqY|$^79Nx+x9t|uKuAT_YfkxOb*|SAY}F4;or3Tz_9sa z-0ZND=uer0oW5D$BgPX(98&IeUpevgI{b>C+|wjEGWP*nKs zdn{oH5}_*~)*WUm$51aJ07~KTCp45m@jO1h(nm;?mX$G2@s45HaSP`xcY%VDOw=Dl z-eo2Gj|w!fpED75J{d|86)#1lQ@$suP_?!lbViKKW@%Nl zp*+*9bQ|hmyGul?-?2;))f*U$jEw2&={vi$t9)$-D3Z%`z-7QqQC_KNAs#7JE6+nL zRo51g@H8f|sh=5vi>yaaBS7EuCt>3^d`gJ}YQZG)21)uz*mH3pcKjNP|HByvR{wi& zximt|m%qbogRuJ3B=97Z$23qadpu&V#V25tLki4W@q|uo?sA(q!H8g2`3m2 z)ZWqwL_#StW7vHTREjq0Fz^_pdP&MFQ}kPswTw?tzd%L-;suxrww^eA@P6IX7Q{er zf_-=#!mB720CsR^2*#5tgQwA4z#^z6^1vS4`vpZMDLX^vuIz^6sK;k}9qxVuQqga5 z;Id;7U0PYxe;R4{ODg0gUX7i0NJFaE9RFH#Hg9ciy*y*-^FWE8I(ts|_SeXl>fD5K z)RMmXMw3c&j?+qXeu2Vv;AWkN)wi>|9p-(t3VT2nu}^_4%4dASyIgt|Xg~yV-1|G1 z`g7x{4?Mo)RgP!^W(tVNQkG>xHY@Wqq#t<&vcb_AT0$+biH5!!0v{gu31THP)Pb?@ zNR^7Y0lgXIU$on$`z!RX`o`!k?zbzZyBuVhI}1Gql^$=sv3Ahbx=zV`2VdV07do7d zC<&UP0>H!AibU`Mh1u4oMhG;?#|z{oKyldih^@n9IScWczcq|QB&9@m8MR~6m zey@j2dKMFtiI$QwoEEHXN|kk1gU_E*+MF#B!>GK9@>e{udTS#yDIq}+ct8MBXU?AW z2eVWt^q-XMi0iMqz@G&BC`b^PWkp{o@@!HYU2^7kgwtInYtc{>IBsCLu5R{R(`3M+ zAZ5Ec0UVr8@I4;I$P4#tA#pSRw7;i)`CAY!d98u%JEu`mLUO;_YiNVwU9IIW*)flG z1{#5Ju!!@%-8bCGsRUgPVTS^1D3cioIcuxaO-tvqbMw^HMz18?ehA`?Ngy&TCS8X& zGgqRvUWwpIdJ6K))fo`x8K)qJ%VYw90-g^4A645|HI$X555TsGu60v@Lt=|=ZbCm` zHQP)XVZI5%1g8E{#<|P4J~Io?Wj!&C+jb^re%dLqO+7?EPEOeU4NNTe)*$DG0<9FE zocm1D@4bG{^LJx{>~rl+ePL+T%6G8H%3u#BRjrMCO=gqjM#Na6wC~BcaR{q%g&*1^ z1-nbm6eH_3CB3@}Qoc zx;_@Wk?#Vn62P^v-q@V8b31boHR(BML(}dX&iSMzr;NwzS{WcN2v_yKOQOC0`Qh0r zzWY0;4KJ>*2IX7$Ai^VdfgnTMiYZ(N!70!9IEXEt^(hXxRR!KWc<^9qdfHWv>jAiw zWDC%)h(hP_kNUn-VXQ@N!A}JpDfgNT!AjK`x0Qd-$iMj3*oR$^!B@Zn4ui3ULdAxO ziCK9){$ldGQAc+-NxL5Hgmc+t-U(kGs(5$RG?7b2>9z#>ciDXHf4k1m;oG%ci_7!k z0Ei&iYGkjiVD1VBetQt+HlUCiZ#d+(%iup8J=E(>LKHbzl_2e=GyCr015Qgf~lo$w0g+Z{z^ zQRlw_6evMntebzEGQ062j+P$_vHnm}4&AC1<)^dGc6D{#qej?RT4G&eW@WW-g{6VR zZ)~53PkfK!W6sLG7$?ab*OfyAB0)rS^!b95`x9Hn^$i3oXX4Cnz6T;)Ty?1W#QGJ8 zI7cw32IJF3PhK^x_V?3`en>=2+^_)30ZNTo2c_nw*p+-cp~?~2)>LW(rw_PJxn(A0 zNhOUf7--TVR)pGtM`t678zmhEUn3qY)vKEt-m-{a2Fh^)_i9z0N z=*&F$`rP^B!CGr`5GeEPaSDii8kmtO8*LURxnDUDNCk|nMVnuZ=QlYx@&v;Cuk?DH z)d{to1_~xQm;>sL+J}DUa4ZBdT!q(wF8?1HsHzwaUn5l>uE=J=o|= zx_w$YI>vwq1_#;ZuyggT?`~1vCrck!puNw+Ne`FaABGocVzt18WV|wX_Z8T}Vl7gT zIdb9fhrYhPtu0&9tG68j3)r?Sk5f{{K%R}becPp+!M_fS(t-{HFQSOdxuJwJ#WZdM z8}5e@!fjM!c?I@<>?=DC@xT-$>_)H&iU4B!^~td?Dw_^y1tUlh55!J61`&G!YA}sB zMh%tQ7vmuBy&(s%I-a3~f2Us0Wv&R06{JN8E{JSoo}+;>NMTnhEQA?C#n?qH+&QKA zZ8=#49I|p`S+p0dZJF#>gUchJ zczRvEdNqvbBH*9|9y5PUa(38zdSy-~#gS1_>Z+>5pI{?L(Mq5lM38->LBdd(y95d1 z6*sWI9J-4Drv8(UcXVkz8nVw1+d2`|kUomtY?2Tcrwx^N5yN2!IwXQZvGfLO^X-ke zhjrMmS}(ZP24a)>+;$m=d5o#?z>;r?mb^0Aek*LL*s+uPKUMi}|4&uEN&Ua8@(QqX zp~d>2RC#YWNn#Nr!Sdkh6+retB0(#)z@q-FhUs6;y{8vu>@Uh5qy^d2Y|PBeH-dp@ z{&bPctqtAROE`I5Bz~m43pP$=6kvm3^?fj)7ica<+g5m*d#B2aB;C_)ZYor1zF|n+Xlg`S#*Pe~c<-2lrZgu>`kw^6)6@vs*cx)Vt-+@*eR{)5_Ag zo~?S9yn}h{RpGqLA02_W9bbMa#cL`IppHEF6@nUIcKVtzDq({;cu^hp7jQK3Bg4s(Z!~zdayfa`)nMv z3yp`CE256)b+DnO{d#nS>9=R#ix^tqYie=j>Jv(tn3w>+1%i`F?-xZV{{$)OxTRlwGXrVc_TfQuOZlaKaOU%nL3W62FsbxN z`v7DBbL%fM;8l5mr}aq>EnF?$^g92f#CzIsLi8M^MQ230_xX+u3)j7xzav{{gyWH^ zA{x=SfLB?s%S@>NQ`>S1G5-Dz?h}edG+bC&aq;?Ot{x4wJvPX3^gZcawqtvS%?{9!eiE$7=r z0o{}HBcQpNc}b6c5wykLKnV&CgthAiL zq#?|QafjkAx8M;V@C2VuWoM;))jh0MHEmvYd-Lm@I_$i;sGMaSAq)_>VWLZz zvFYn=!4PpWX&Yp!enl>_(*jZp4OtHs7a?gcya)y-*+0gW1oBs#5!s>B!gtkr-pEYaeCz+9_w94tDM`1;Kut%J}te`AME96XO~ zN1v|)(K*(z2A9^LLY;XlwLNk>?{Evg5CDvG68pB)+-%MdcOpBupABn={MEr5_I7lr z*4R45*CU(llIv%t&7Z)|4pX9QE&@tEbTmTTdv9aDgBcEq42PB7Ja)#U{3OC&OO_K1 zb?zVfD_Lw#pPgJNzUWoJLF}?AF&i#{|r@-I36i?j_|WM}#XIQ{n$&LDt<*DHQ4;lIe$S~q5ZfkE<^nI==({}tRH z`3%4bqs@h0$7>dNXvGCP7W&?`ql#bj(BjKR%3mzQKU4_g|3lC|mfQa;&;Nh(9{-|t z&`Lb0E`d9j|BmIC5acN0Iu&?Ot;?|cOVfZyvyTuuXyT|>1ug!Uau26MmJ9pC1sBj~ zTK*9R91G)%a*k3HurEkl6xxGc(LaV(qFC$He-))v>;m@Yv%zBlCN*Bzh9Hyx=15-^Ov%oQ~n#E+){daMFQKO}|yMY~g%;mv%HW1THjEr!k zfN`p0!?_X@4W=7_aK9nM4Sc&~-q`hI(2S1fSH6<$=MWIUe3FvzI|)ipIkB+wi>VZGrQ9Fn=Qs(q;Q@O<%n&1OeUPO#zA zGcs-(37-c({`3Y~0AtRn>TLU00a*fHoa^Onr?k(mAwDZ z)p5wVeUF9pve8pr_CUpgsRTq=PdI6^Tkes)AZ|T$95%-S=_nB4*M%JhE~y*G7TKP_ znDnRkdQ6C`y!+#rODoa^u>ffp1Rl8?4gaMw)A_E*q{#-|m;u0LJ__n+MX4Kpy3)mFK!%@$1hL8R~y`Sv$FJf#?Af{P zbB*5YOFbzf;w%WnZ(~n=maB)pBVzw2w8m*FTvnBI_~9DoX~o&d7+5&-4Bnj;4Mqas z90dLWq>P#vP03wm$|s0xijNB(f`J1Y@m(F3oNGJp!Sl10?ZEWA6$MoKNOOUTeg`ze zzvL%~u`l${=lGtUWcge#kcd8o*;@i$gaPnxMK=i86Qr9 zYvFo=g>Dt}g~QE$GcI=f(2x$;B`|MQe*1z>Gf-Enppx!f1l#4<6*V>a(tW6-ulhgV zBaPKaw}P7K4abYnW}|x6aIjh66uiu0GyCXEQNd1zKE_d)Zh{z2j(b^1*)pepQB-sf znz2t^;L=b!f}>BKF9WJ19vxff5Qo_pjsqt7Sf7Cr#tnf*v?tF*tVTs&|3XjX4K=kk zu#+l0jEsx~uWAn&+f{mIW=k-mbm>BsBt#rL)6gej!AO^9pn59zIv6Q01Lsb?W=?nn zk^muvsQWAZdNou67e|VT{_>Iwl!6P&NXP8VTe&jM?#-*e8T>s22p(vk=*Z0@Z=Vxk zF2D79qPIeMmTye4(1I+eB(B%(3$0&66m%=<7+3q7tk->q3iwH#jsA-K+xIFlZEbC- z0fz=ucgTkkErm2Dmbp+9!Mde2hD}1f=w~qcRSNpCRX0!}<{{%AsZ~Qg? zmdi(Z{#s1_sO8L0eo1A&KX!%tSep7@#rXQaV+LUzHxHBy^9G#N{!sDgy6&(XpvM29 z(RY|jpre4J!Ol>m8dCQJPPWX|OZ;(4HP{$M^mswn0bXo;T-=xRE*QpA>b=%hIJmnH<&nb9G9sgbQ0VXD)7i!MfP71r2k`n8DRHEOE5Fdx*?+lw zzyQD|jNh#hI`fbFYYMl-8U@i50mmajQb<3CiyILc$-lfVF-3Pg8*&JaSx`0M$lDiE z_UjPp;#F$Y$F_tHRf8AI9anEdtjt-ZW1?4dz)mkJlPqkVuT$J&ZW|eozdF64iL8ACwH*fFvrK03uz`9*?4`b*RF<79a=;_fWXtLgo(`d6t zsYiX9Tu8wbINf_?Hb+KMY-qt?ffo4StULeudVy=+} z$HCWGk@Grm0ABSxo&Qc+X$ccZ^9CCUNlCfqzosG4G=j;W0D#hXiz|0KCg9*y5JXaj z0i>UvlG?~+h9}9HHc?2BZeKf2^8Z_;R~fmBQ2qM)Q%k~co4?=!V-%pWb`=WUnPIv)A_5*cN zVWiXsom7CMl}YaI?gqszLDj&y9!(Zd3g8d}1Ra3GCR}|vl5A|Y0PE*mz{;c%BQ<~Kvn)sjaLCyu-eor<3vJrXiv+VyKbr2GcZ-v153aYQq_-xKUfF!em#d#M@ zL(mk2_cldRoWf>IQ{06wgaIfp0Oti@STOTv9-|FSO2=LM9o6W?JhSTPJX-il5ioC= zKqgb2JK&t0P}c&qV-Kp-yDi9 zAm?X~O5FIjBrp1*SKxnE(m8mP zyB>MH5d)7kocDZDVADz41LA|(hTv~2{kVC_XQ`vz&L&!)b8$h>6i!u2$l0)Q8Wt-T zcZ+{y`y{P!+eveCt(=qHv&D)@Yh!Eo1IfV(fjB={~0u#E18Qf^4$)NkrXTRJ-NB% zx4y8rM;r=pEvXndr>E7mOId z{QrtO6KJUWe~*un7AmO}Q}!5JQ&e`cPnIlYOO|5nL&m;kiKMYjjY<@fWQoYq!(^$5 z@uU!9Bw?~=mo4sR_}9}t|L2^0pL@@__Z-J@95cpmzQ6DH^ZC4A@3*K67)%{Z_tcRB zm0P}1OZA2rIA1CR(A((e0CrsSU9UR~PU5#k_Fi5Ey}`7IIt|hZ0>^u8frVS~JRg>@ zn?DTPJAmGQSI>-ig+LYwQ`m_U(e4oT4RdUA^YRuQ-`w z_UsWKO~fdB28>l;%VPJS*B(DXYmnw;L`1X(rH>wUhf<(Z!w%9D)|pao zz3}IubSACWL%Jw&b3Iac{8M>p@ahWe;Jtd--Mt=b0=i=4YdfwtCxxksoSIH#>*_FA zG?5Vz>S}5(pUR9{LRhWVU!jZ(&h7w6`!SdpfaXD*;s6nui)*D`D8&J}t9KnwS6i3q zK^O$pv<#XIX)}=U|5EC^!M0}D_dZ#vL=97+0?2(YJY~nlAJsZwN`pJ`L2?%GKK%m$ z;j9lLLk*3UIOzxh&;k*+!NfU;?X|zNpv<}^-G>^M{9uc^Ax%)K1L3~1dd@{?B^+kz zXN5(1+yPJq*GlUUwwD{z=-s;+yav-6lnpBn;^w#S0P{f${TmQdF~9vc4IVg6KjvRi z7?2V9d|L*H43><)eO}kf|I-hy@$o+&_`6CEJjYL=tCoU4N6XrwEZnLK-WqtL;rF> z{!O|DELO5v{$m9wYIV9vlUo<^8?uROF_u%uz}nBO}ObkKz5xRd1cYpynJDBWVFM1J#=OgJ*rJVodJttFy6*41_Q}EL}D6F?Hc-s zf6*$211-tzy0{sNDKTF(EcoUVQ-Y(I1sETL3k)!Ri^|Ii=gBS|g|NHBKmyE@%2X0- zexzaJz^{ZZTYGzFB#j*z$E z5UDw&>;-A4FfACqR`V!E+aV*6M%nxDJFc^+>2-k-gzTyD!d?WHZN7OJ&B+5o0~6ef z?%-Iz!n9rG3-{{0CN$e=Q}grlF!2tC%1q{y>17zp0Exb<8c?;J91{I74dpv*oOs;X zSWOKKZTzIU@P0OW@Q?`wtO?)R^HU0+V;k5XkAnPwSMHDZ2!Ngh4B%IROg4$^ta< zsQ+CQ774Go*)TRbTK?86I51cP7ihPygoQyrC(_A7)x}_*Vm4vh9ibBNf*}&vbfKaE z)ZOmr0mc{L8B?RH{RL%kVaZOdBGILg!lEk=EczrI9dA>VxFf(20xTwSoC!`80)e1< z1+ECR@+akeYMB@T&Vb|+R0_CP#tLL9k88YFMyyuZf@*7P1rHsHk}wtqwh+qi*L=M9 z!(ee#-RPBL4uehHG&dzVjSMCP5@e=~1Ck&EvJw4tvM0USS0{#)a$O$DuN2v3(xfFL zF223*?R^FF-EWZ0y}l_jUc;o1`vsQka0Vd+v{glPGB*;&?M!l39C!c|=!rWXjhdq+qI--Ad3Cc1>+*8USLDS&pwWyPZ0X2;Z6{yeO&_lgG20dcw5fvaE;d0_VL}&@Sq0IqYp{$~!rDsO0T$C{-6;2%BYM$e1 z*V$kM%NX5NV53WpFhD48-bh zcpCF~H<#rF3aJBn3FXs_a+w)pCAhEs&J#Vim*x(-AWbaC$&zkWA!#M6+pd=BPpu61h6#uPDMr;R%1S9sb*^qJ}gM$A|m6~Ss{z>pofY-zsn2WXS zsow%Nd-C6v+Git^6@!jTRlaM>rDnJ8HZW+#C3TdLDp6RIP*V|;yyZWxgBEA7X{_ft zf92WxlG6OBm=-~uJ0Ue-B%Xnz9^4>fAUy+!Lyxa1fz1j&T$lMeV@cv|aeL^~$qSYf zkXQ65GgGv<5@bky{rLH(Y%ZNeTX7n3Tu+Vx$Ych)h?<#872U+iesmm4VCBUv^l$`F zgGwzTSagQ|S3HyNtANiBhunYOA7R zf!W=-*9h_vSyBL*aD=tu9;$n1BKDfk==_0Z)Q5_tZ%eZyLcK3XTI^FFJAFK|^`MA? zY8IeQUp{1cz(x~McXhkD^M`BVCWrSBGqg7@`+DBvHG zpL5nvKQVhz9Y8x|m~6mY?ozsH{f8`a7GZd&Nbc=r80?hoJ91&(QPWW!cf zU0}2C!z)KFtJI)NmnQ5}f`r+j_C-##o2+Q2{(E5PJM9I?j{~}YWh4%7u57k|h-aN9 zVq^sRSNi)c>xg~5Tn6_Ia?j0fT{bOoL3u{+bK>U{G3(jKCHUC990hdGWlg=yB8NKVWkL9s9LucxF{gR`)8w#2TJ7OO5iNx#fWwU7xA!vwt z>OQ!0!Yf(2z!5WDTbSo~@|<0x7@~KY;LEmyJIsz||*i|Aft*A&_-hb*;`3zoL*X`KEWW|Xp zJ=d}!q}vNG->F5{>i~0Ta+&qbvjkh7Uw#7c#fYOhHP2;<)Y1pcSv@3|a4RVa>Tw4Z zy}s*ikNo^u>9BAmo;G^O!)H9UqkNS9_t~kK*;OAuUVT>U2ckpUAImb06?^KZYBu~n zts=>7<*S8HP_V7-TzLgVUJ74We92rX=X(UOGo`zCEuURgn0%d|7o1ZuoECZ6n~L+P zD~v8EYvvW*1zCZWL&J*=OXEV^mwmn5Crcx*Hfk+>eT#0G|MpGc$`$+3zOmVlHqYMt z+3i2#)4XJuy#8wZM%wN+HBC3}j5m~kh8N95CMl4D#afzYS|}9Gt*-~}Q+XP0B zcgr5uvU|@~-L^lf9o8+>e!&7+2jjS5-I@7kzPYk<<*c!^p8{!|JRQ)cY~b_x1%9AW z$$TSQ)MaOOF?SbkH*_LTLkQGx!eeuMq~e;3M~hFj*AQ;cjYhS%9uHT!AZ)fJ68U|M zn(uzL@Mfq!7Z+FeAJbj~nL;-8bu*_>RU7KqDbsC2DairjFKng;M{jf%^u@8Ij*VF~ z9?rTcr1WDjo!5S;DSacwfMaf3WD?=}b^m}kx$UOv7OFgu)5IjPar zfz6k{nGsKWHuNYHO`gA4^W{}gVp8&mEUh-9f{sUMpg&}bB&S2xe}MHGOBI3doq$^!!|Hi8m#US~bx_hqk<@bj#ZJToNrR8$uCUdm+4QYg#3p5aqU(GR zWt++PMudC@5u>0mxg1x45nvx0WEP6iMIgAEFb}h`kaN?ZaUD!lrMD%PLQ*&}~XfD_4+RVLdADYLuk5KbK z1|=?Tlq7M~w@(aFCzy?-KyizdGJgKz{!~woEzeU-`;wlOXvTogqZEG`*ktvMOXVPbl7HF=k z8~v24n#SVuOwn`D!KQDn^Bi~ATUjJOJU;r!{49MM**jU;)-Ls-_3bUOW5!s@DB-A+D59!X2c@T{XJTXo z9!d4Fr$kE*e*V@Sh^p27TWDP^CvJ~2g{au^kSxY--|<0jM(imJR5j~El4UA(GKOrp zZGv*<9=SDHCxZyNj2iGWzJ`z8is-rPjY7%<%Lbh|fv9@0n*uVjBtC<8q)ff=MDa$% zwuI9tA1|-OGQrGT&9+A+8&0M*!_o@*y9>C&JkQ5S-FZ%u6aIA!;*|PnwLBH;u>Sxk CkSR|9 diff --git a/docs/sequence-diagrams/puml/approve-revoke-operator.png b/docs/sequence-diagrams/puml/approve-revoke-operator.png index 448b8d10c865077d672826a1b5d60b47bfc21e40..be8ca8976552db84e2f03e5e8fcc8ee720f97b2c 100644 GIT binary patch literal 23427 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 G_tHPTz%w5J literal 26550 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

pA3c0%J&wmQawYSlfadd9 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 XqVCg1lOJ>dI1rqkvF=lC+ra+<9S;v> diff --git a/docs/sequence-diagrams/puml/burn-domain.png b/docs/sequence-diagrams/puml/burn-domain.png index d9649d2460ede7df8a41d897ccfab9ae247344de..910e2f37462ff85d12b3bd90980a47dbb7037e36 100644 GIT binary patch literal 21797 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¥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 Q1^)~JwSrr|IO`q%7d09^_W%F@ diff --git a/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.png b/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.png index 1012e2f41388a185f699bb7814b60c3fbcd551e0..9464d4bbdbec6a84a7ac09af40761610bd487153 100644 GIT binary patch literal 48083 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 z

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
Ez`I48|Y+D$$LwCE-Y0sBEW`i*#+ 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,{=!ziqE7VY^qwLbnpt$4BUl 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�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 diff --git a/docs/sequence-diagrams/puml/d3-marketplace-list.png b/docs/sequence-diagrams/puml/d3-marketplace-list.png index 5549ad5c54c98e7dbacbc1449aa1beee211c047a..70d77f844a9c53bdb7d32fd3215c0c97acf66bbd 100644 GIT binary patch literal 23283 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 z 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 F<}dcZ*_{9Y literal 26542 zcmce;cRZH;|2~dVp@@u1NVbd+*^=zN_a$3qb~Xta$rjmrW-D8y$X?l$jO>-YzR!#9 z`|f^!-k2Y$*V4}3 z!kkIp%EF=J3mH6O;IWdL-Cx&HP~kaGUCi$x3T@DHcyT&yH2w zp5*Xi8ms9n9#&xFWyh=4D#^nk1h1VezVB+U4HX8rrRlQXT~G7=bQgtW3d5DwuxR5A zYZv3Z59VAo-`$TQ=Oa`3?(1uWufHY#Xma+|ca#fcY{m?9@?&1pv#3yC(EIH%iIU{ixK-(X6mok{Nw_*eH4{l!P%0atoF^ z^@4LQ@OtBm`O}PN>eu(C@1VC*zOlr@T0@|q7;1?>6jXYOSd7O|BUB#wEHC$PwCggu z^?AXwS~fIAqwE{@Evy)dtz)HHJ^1&|va>h2=@dN??7sV>sqHSiqt;JJM(ZXBB-n@m%wC zhDCLURE`<0eWKXzUzltPl$YPQMPdB#p;TsK1a;uuEAUas85_kK1qB6asn?|@-8qTw zl@6QpXUgSc84PF&ejy)tQ*$cTIiB0z^k7H4?#NlRi*ZfFVO@cAP8UAB|Fwl=GsT|3 zKU}Mnl6d+9=0&*H0oO3G-ei@}<5@-c*+}4=gFB1Gn6d_Zu!y1<)F}q&n_k)|xIe~4 zK0&1!eKS_T!)u4_(vb)kU0vw~k1xdoRz^FpxZ32<4ondIYM zu1f~OC6wX^Oj$%? znu=7o8ZQL@bBCGD8#YY5J`b0PDzXt5zaP8!JbylU>;i+=^=wp?*-O2|NL(6jy>E%K z3A_FgZxZr#LFfO=D4&@}M?tB7Y9Ly}VL8g#idJbicZ;1)FkSpMd;{e@TxT#KJZWty z>glcbkqy3zlZ9;I57htd`8$52dnBW?oxPS5GTL?SKR){7UZJiYq-8ObFpz4C^270n zp6TE|nd#$@jV|d*`}scEL|0aF-h&c87x!xCO|PdESVN5s)H>BWfxnvbPI|J6!*y}& z6`8=x7q8iEXAUHzmnG~Zt3w^X=AqlpJWNkd7Y{7Fh-{gsN3;0PS~nj1oz?CM4-YLS z)d1q@8*DSZpI?zlVilwOzQ^HbhBA@(Knz=pP2{9`gva8b^^lsEAhL%CLR$~EH)bE> z;+8Pz*!#ab+?Q>8b5BP@&*)?TPCm|7Jicc;<66P0{=WUqJ5DYxbq!jg-;Wmgnc*`) zlPI;bIlyD1Ui>6gKT{^2o-rB=ISKUw1{8J^mG;cM2W%D8hL7K{n{}j$zDg6$J%b$3 zRh*#LkRP+|Ng3M+*NYb)I3W%x;o=*)BL`LR{}>*_m|$y zW%j`$s1Ilfdwz#n3KnUl!;)@P&ew-EJv}`Q4Gm#oVLy#IYA0dsgs5I5<}gP42I3OENPjhQ3U)ppeBLc&qKQ`b|(by2k)_cY}H1o+W9W zo%UiU-KXKNWCCPdw&lO{P%h)*uBj{ZC_C}8PL}I7Mvd-KES#f~#A|rX%cU?Lrarbj z>J*orW2;_MyF2q{a8S)Zl))hS>IS)f#=|dVA1)KeS0JAvm`mt%hxMn!(y;gA-VE`A zI|89p7`o=erR=j4H%R%M={sw=q@<*@N=-uhOnn!pA~iOyC06kNjD61dTx5v7a-lCi=Xgq`}I% z$L{oidI@1Oac|htaG76g6l14%ovld)gZeESj*EXidL&xFSVn2<=+nVmuQ(PVLkMB? zH3$mo&Xlj`&WI47n@2Y%$cknRU22t;lq7~VopkgIBCv~theHU}}ZbHjVX+Rp-3 zQaNT{YgBW~w1E4;Q&`&j+le9Xa$Kt%mdNuf#VXgodE7SMSA5!pvtU8m+MnB4q2EZur1HC?H2P?JVD*>(meXk{Tg%s8wmdVl$rK70#@Ubu=T!-s0><;Ij_An z`|u2XNX?$5xB$U*z;4jO%szXbLABt450>LRTS&T)NYHH)D=Xs+rE3E$fnS?9%xYkV zk+E+&?@o)Lw{vn6J|3^0u6Amjc4C-_Wp~MUKNPWXd27XWaYBSfmFc)AT~ZMi9BdIB zfg6(IyYW%#rSg-@W1mG|CB*XFqrY|Q*}51`E9Q_=f!6L7xf0f+Bqe@wmw9&6qX1Mz zqqhg-)~3HWh*aMNAo$l0G_2&9>qVt&=KIaQeV5mrX+s~Y+@w{>yV|1mph4G(1M8h` zqX^CoPAN;G@=gIAUW4Wf6@0mx9o}z}Tbcye*LT)_ynp{*{n(db$VG{koM+yCwj+MA z#vr`@=rwaBwf!J%OwK^man%Pry-hr;{7SzrOokb|;!&!IoA|dTif03SoW0tbM{2JSgKbuyCO(Msx7olaC{z$po*vN=zf^ zN+Qb1U*htjl6gt6_Br29dY$ZmRK@Nj?D!N}t>!+ep(KRoE2?>R$7KbD0xHR`#bbd) zRzA;v(J6mPf9N0PwvR0(Q~P<5h-q}bo1&Cb+J}|d?N|3zZr6jIV*;72j`*q)JJ*8` zTT2tP8l|+6cTD@97GESg@-Hc|O@820Q|(%5=Oo!IVEDy&d70GvoE!d)(G(%S;|sHd z#QT?~54JRY>a5OgvYs81XAa@xobS(ZkyXg!;B$WYy5u8IA*r-Yku&4LN^){q@a7^P%y7oiL{ek4yJOJMA@O-GLTmaZmA8_0$wx1rHB*@oe?IA- zY{tC(-mi4$&Ff*6A)G7&npQp`t5UId-3AN0(Xj}Ff)3(_s_dLb#>W$?C8P4pMt7PD z7biSuZP_iZOQB;@g>U6)?M~;ZW2xo`khhjwthu|RT3Svw7aO%xN7adi-g^7il2ZE( z$I^AqCs!jKzSYyIpkZi6()T}CB!J~6gtFO#!@jApp^qo7D(81xI3_KwN`iT4w$z_x ze}1c9Wb7NE*{cIeX2I(A2{%t0?BKXY2k{gwt+6O~$G9bx{5jeA*V&TA$XyfcOmJI; z_hu6IoZ{Lf6(N&W(;|&b98K$avWrGlwYBaqud}CrT>Bvq9#5#;CWFPQAxW1*^jM+M zSGpsyj_$3@`c%j|4;RjC1+3v=FZhML*xt|15(?#$^6?g98q1&P(Tv z>(gKn?z$9A@5{Q~b&+pjWv)>g=bLFWbRuWT4EJ;6s9WM$32mr(uN}|pJtUrD+IJ)x zK3q+r(KYUVSd_TS)N*bU&6RV0dQyR#G7Trc679?a=BxAidbKI?8s+9(J&eQ63v=o% z<{m6W)UpZW5pwSfQ&XH@-rx$hiMp-ozCJY<&78@as#Wv+z&uyG3egl0S)f%RtIWyC z8S)~arr{i{9^OsoRnM>cnYPnEEuCB)1trW9)eb~zUuGcbCW-LSY zm7bxuEXoC}$T# z*9#3D;gbK7QXoI&ON3Ll{%0n0$L|fw%$7|`eSy;}qZL&(HGKOE50{4R4a_*p4vaey z)Lg$dTyRIf<_*z0_`f^IMo7QmFszHC3DMM*ZlL@9Z7;@RFpTy%a`hGXBc#c z#$7i^uGgcY+9RB%m2oz-l6c#wvTz^kn*7|)RsDRhDx~-1Ng%7Cmd6p7&mzE0uk`}$ zs@>zG6<^M}r!I$^9TAzXPLAJMGF)2|=lkDV|G*@mH@_UZp%aK#V$>chD{!b}+K!4j zzd7^9s>h<+{|e1nNiD6>K+PjuiiZ^pRD68ermVySOBaJ%yPovjo(x=q@T@?=LvWkl zWPb5MaPTwd(1$~Ya>Z?usWXg3!8s#~?5s=@oKkZ}R(4do$@#FC`aSa5hXh`)rf`SR zhBca&p|w01yWW=^zB-%1dAgbU`g6${?VgVn>C^N+BEIuYNFuzxdQ;_vxAz%!6KN5R zru7i)%_W{f%dtI5tD>TbF3kH+$FJh|#bH*PsuV!x3keL~+}zYGn#79wzWTkyTwA!3 zs)Kplq(%4||G|@pk4)q1`Odrh`;z%u#rQ2ej?0U)voz(e4V;RfE7dHIRjIBv-4j@% za;VI~qmq!jMN4balP2D_(?q1xm#5A~PVTjYP0X>_h$E2paet+5qQqFXr+T=|ESgE% zxi3rpTGQ*JgN;tqGv`8zl(H2XfeaiSaFvt@&2%QN%*}BbwOu8zWBee`JY0TY=eG7v zl!Hn;vPy-FTQWB{D}J9Nq2|{1QTWno#U&c%TH5(zOGw2LhiJvCPoL}_DTXn#{xwW} zw|kccbXIO~K9N|eyWa8U-9gjgP)ffIk;QE11h2!Qam8VCXd>mrt$=rPy{SJDOI^uq zHqnKGHD{r*_e{EO>TbWWs!e|Fu{6x?P8ogv7~={x{%w`KC*K?Fo{EWGP?t&MA1gCc zH8wW>!eKwJl#JOLnlk`c++=%l`@6B&qW5_mY8MF!3Fx?KU)F~pprpkvYv}W$)EgeV z^yqiWWoo-S)aFI^ucmF)#!f*sM)9waNGazlgl8 z8k}Y}QR~)bqQBZNnJT?*)A}IVz}p#>e@KOSm&1JUr%ZgMbj-T?%J`vVG?QZT1K}ew zm-e1dgcc3lvKFoH=BKBp?fJb$Uy+7d|N7Y-92~s8GGXjwa;Q{*;Jb1!?Dn~1X!O@? z#m{47Zv8pR02cN7L&Gd4YU3Gzg*@^z#>jSV`dGblWO2B+iRbe0W8expHVJpB-CUr~ z>pGk1FTI(v;v8e6qiAQ&&1^928o!4fHu5`v*vQwUq(s>-4yGHmYuL|M z-@xmc-LdxRS1v~~vvQMehr>O!3d!ne&CTK~xFjSNtRCkC=cZeu-?Vv96v`z(z#?Lr z618diW);TAl~yJJyE%c^>6Th?fKm+}9$pszZe0Z>IyDc*I(%oSsS7VmMKa=MccsfV zQ~s^FNp+)26!Q3}D3RTv#!oda+ru?abu{?vFEUc*DrMgi_^1L+{t}4{&r>PR>WxuW z{kbA9udA|M=I2aPlV%n2?-V$$2B46golPiWW4(H>rSCQ`Z(KDgDXF}?{Lnt{!yJTE z+&SzUv_+0TyFQGM9}SflM`YY~-Dtn(ckxK2`+Ip)Rji$#rvQq5e#{I!LyYjPY>f=g&1 zxMUHCU5Jsq*w-3+FN^5gnayI}?vluOBC9ktyhcfut50`VWJrC`Vq(Pnb*97jJAC1K+qt6~UH;WA)?kyCM@i|8%B=DPbB^A`}%@62!SoCH{4;34h ztck|s_q7@v@uz8&nM$R+h}LoEqN5XE<#$^D*xeoK=Ja53v?6@{xsMOVHNYxEY2sI+ zjEL?yts9g}&W>ful5I(n`d|{6_UA+%T-G$)t46<#LkZOM%R9zn#~;0`$2E@V_i+^p z7!J=cnvKKOEHoctogAfqq85p`|8;BI_nfgBgSA~ zBysIXosKgL%8Q*9kGdZR->J@6e14Tk#y%f@Kp0yr&2eiN#{2ooMY<29-wbgQoV~PW zTYBpyGjKR8YHCevvm#E z&wRM~&i&US#ijn+9`5hLRg=oR+PwuW4}T7c$}tn8=3g==y=b!_+R6XSdFXaG$qpUwnoDMz8xo#uQpzI`zvr2c_&7wx}jP07j5 zbGv)kf4u2>PIN+|4B9_mzc6n|@yF-?x0ZzZ&Zo~V@OXYb$ANRMVl&m4>~R)SCG!;d zm%tTD*1u4-Qu_u3K3_u!ygl!uj=SV)e!03uQ)R6zf!IU(|W36J4tjWfSkOry{jF zZ@p>ccLwBY@(4jss!vj@aGt~HTOeEZ4|#8QvtYjc_VQ>&$)gX?zJ2?~Z9gAGd{1V+ zLz#7H=*>N=<&k$*$47^z*A#?(3`|R(JB~YLYF9bTb|yx1+XOjKX*R%?jb_wz`0?pd zcH`ug@QW8^ymqf-MWetAMn^{%S+mqjW=1P)sjl5k2mK>o^PLR)`G?t^ghTJGDazQ& zb|EPaRXJK^^Qhu(=cT5mzIxU9?SnV7PHkJY+x}MByLZOpkO-t>Sf?jMk8xBkkTBhN zy1lGzWZs+6UbkU{&2xu^MSi}SWjN9tBW{?Bi6zWS_q+V=`O_v0^2R{=dx1+q`~BOu zCyRqD;-rj8RgwY%b(Uk5_H#Wx%lC+wv}oIP1Ai?Jguy^No7vYqI=Lj23J}54gkMnJp{EZ}SBop_6|NaBx6rJ9 zy2j_SB}T$ptYNcUY`^f8xpwCk6&01TLkD5PYlBBGu#_6tKNZOo+a1X>O}Z ze^!8iVXbpNtSl*EOW$4|lXTGVQ!YTn^Hn9K(n<@4^w?R6&FyZ?mNeEK?U@Z9uD3D^ z3)d#eCi16=3kMR~+uKuVSKH18Q#MxE&PFk5??JTcT@RGtaof9lZH{J69ij_F$?EEA zhs8m`Pgb?N8K8w2wno`oTd!?z8~Z`nd_AvSq=(-Bz%~i43mpCmA1njZ4hY5(#xAwt z_(L`RGh%jAC6IPQLPB71utg7Zl?c(shD3LGpYfii`aKdsj_sRn<#m8{hA^IEx4S+a0b!Xk-P_wc zW?|{wL`JSyJ10w+$1YdNl~fn@-KSUNh_5cXKUlMwBJlryH$v}moVdmJdPOslvbj$J z9$YGK5zfAD9Q*4Ort|FPgN4qU^YRx`QQH?`h;Q*!$wDr?mril(7A>FcjFbcx{R4{E zcGIACU7J3{iM^vl)b4b>DnfvRLnVy7pSM`YX__DwLuq)d$}#(G0KsjAnfm(rY{g9X z)eq;>Gz~J>)tBy8?QO4g1{-EdhlgMr3#w11m}TqK)jr`uYg_pFQ_NT`M~P0Nx6Od5 z%+|;c2`gdI+1*TkOxhEpn3w!3=o*_s`|$m$t*xyepI)ZEk>J@#5zUGaR8UG4xnv`M zAt}|wS5hWY!;_j#{b(ccxQj{nt^zhD6=8z+S$}6-yMp_K+i^no>$` z(5Jx;QqEOLXCpUEua^+?lj)R6LmW6u<`QvcrK=xQ94=LOK}9B-*^t!f71%C zzQq#ftHAJ*Et~P$(>NogD%YdkR^9nXoKRDu?C4U9b=185{=UGm^SgU{nD_Qg=K%+_ zom+F9aC6*Q)x|U|&ACEE>pMv@mZ)IV#5=|JWd04UZ1NIf!C$)Z!U<=g;IzHur+t8YY|DCR|Tov?@sJl-0W}g z!J^a7Rbey@hjpqDyL|3p`VkH$>J*aQjzq@I0}NkkV-^^+G%?AFS8sV9cVHV*kByr< zkeTRiN~0mnZZ#g4Urv|#L;`QLZNBMT=U|aOore61q7lzfxKJ4k_cT+HyTv|k`(ygAtV;JN@MN<`8b#bfQN zNnqW?Le`I-FwrQhgkF^qVxdg8rY@s8^Qt!}u5~u9?nc?F;f7cl);yK(rGgUUPMFY0 zBf3jk96o)0fk26gm$sHhw&NYglb_soL`#W2z5L_hCN6;Gc!{z8%02@=)s^d!`XJH;e5r+;E-?+Y`j5oz0DLXN=Y%X7mt#2Gs=WP z8D3&dxGMRCEthEQp4>SNFZ8o#tJgje1D7all`D`Mksifud(hY>lV%#1p{RuBo|zl} zYVzl#5~FXvI?yJGOHE(MB|-kp5>z|4=5O7h&O1(-b?IVRt9Ya`rAU4Tzb}wak`AOwX;0lo zUw=vcE)s4-lm483=DLH19cpZBq}o!lB~L>{Bqcf+{X`)05HaO%v}$JBVuVnGEw^G2HnG9z z?*Xd@ENS%2na-wiR&pu_CX7 z-}L~+*x|HtgKyTcp|-nm8`0i0e#cqSeIYJCclVeirKa4=1b>tncP1?Mvs^MO?$zc< zhnZ+jYlS!f=_~bunX!9Z{!R_b8%pWeyUAx;hYEEY0RxC{9KHbt6~UxE+~Mk74N^!9 zo3X-Fx=VdmR~IBQH{dCym_=-#Yx{zFEx+bnt2j6~SZrIlsK&LPL?>dwZQU^xh9M>R zvLxkn4K|4e>218L=oHnwxuDn6|>%dRY1`!r&Ue>-%`Farvv$cS-WkG|S}j zt+fjLv!bZ!=vq3YNq3xffV>Wk3_~1=qEqx;4tqLvBZ&=h8M?<&S`OXJ0E&pp7aD1MYqdkfLNG znRpODopIkT&SJaQ<+Q0x3C3>=3;UCM?FFBQu+EShXUyId`Kivcu}{kVu9JU1sEo8b zN$|`}%9RZF#Culbb+3-dlrFgV0q>)#Y%-dd>pm>j{xm=a>vCuQESC7qvRB%lQhCcV zD7>=OOQ^5a)YK?4F4%SKHj5Hvnqrih_7}Il_ezb*yxSfOG@rF#M}lfLkK<&kc1(-? z9##cq>N1}*viZNaDl#LZZ5F=(fljdgih1>06;_WoV?O9Kc zY?2UYas@YvO#A7pf(G=Rd=9el3!S>=2*Y0b7W;~~pFs96xVAHG*Z7?8?ziz3yk<4T zj6XA`Awg2_AegBs#&P}2b!v71vz{juqlzIk5Xoko|Hkyc4(=JMBN@&e+7nQ6c#w-! zUk{=De@YH0j&q=feHA||n$9Cl1(Wdj z`uUao0_hD9UL@cJm#0tT1UwQL(!@b4YYHUV-r7O{;I9k58)LErZOnzbGYPld3-z}; zb>lTIj;gAv+yU55d%v>9v(>^Y#tRGYa3?}GadLKki>T2kd_{ckEvRoD9UYL}^h7?e zKkiAxr4V^vQGtH$+%iZyLvsgEm=|L|clInLCFO+}DDQASUH!&t_yx4p4FDV<7%9m| z(kp}7SHG@R>skT0Q8)lUTdQKd++yT4i{zhUnI~2Q>IAz%^JNKMkE1xHOpoIu2uhR} zaY%V@Qq1|))p_i1Exm#=`TmwgOA#eb=~nDLD?~W8w8{2L-SJx>jvxiWt~-RfHmHDy z71x}KsBLQ?1}+X1Ok_yEf!k$o9Yz^E_xDz?{+1iv!XPj{K92vHZaJKlg+jE3^5e&kT}7ovVS@yL1Ot+R z92$NQ;$-xqZ#uNcu!+hQKq7@@Qdv=BRK{;= zq_E2Z)Uusp+9atoUU2g8yt>Bbt1edaTo^A=$PYV|^bT&=O=cCX6$pzz>tV@CF5=<$ zBUNL&MPMo?{HC=(Fux{>S*K$W9>z-5*_R7RKAQDCFj;Z@X}Tmu+B)DzKyLVWdCy(E zS|5ywfw8u}Ug>dM`<_ zytl2cTwpO$9(tjvsR=Ti04;4Z)L8k*+mvbsHMuqLKYjiz08E#KWep@e1{`RM@VZpZ z;zKABcn2LF9YJ@}KZ59#17(7w`>3L#pH=cT#;TpdNrZ3bNJP?eadH-JUP=rkV*Xm7 zlNh6k^Y)=X9vC+a zeyy#A8c=WMC}v_yV$BQBO-)UG`}Sx!-S&yK^$=KyTF-!y3Kw)Pzk(H$mz%5Kh5T9g z_~Hp=I}-(>2m6zz`#=x=Na$2#ZV?d`6_p;=|K4q%qva}<$#*IN5B`W_NIl)%-BEeW zR8xgzsDno2+|f+F zwzftw&FCnHqb$0FvldK*Ls~@028r_1h`&#EY?S6(76co4?QF#@}x`G4nD#@wH!qEt+ zkKsU**wt;)1@+FY3v|D;&D`#s0sr%pn?=r&HzD=JB!r01|NX+cLe26-9T^FU+rn4I z>@#X8I*B_7lpwJTa`Y)K=PghLo1EO`qq;~IbWHMo493Sl0} z_G4-3(%ctJKMNsib<=+Z;8JSpiQLOXcKR8`vk*O`xO^)4&ItYP$7O{)P>n(M zRr-$$RMSv~3yICctL0y-iL!-SM??gEwz8yxqGD$}4^0``*#52Ae!8fT@Lj{Mkgx)n z)g;96Ejqevh*t`^%E-44*!)hN+3fdT^SL-^X~p%KvNCE{_H}eHL8W)TnW}HT%)N90 zOV|bxuZID8*LTRklp62?@EX1s#3- zkWm35K(5gN6%nLGNU{zry--OYzGo?y0G$pd6G)h*p=BGXaox39_?kaQ8ZssEH26E1 z8?Iez=@}@{SsAaX0=5=UITVw&G+MC{sfwV}dSB@0_ZbMcx(t@=t7}wp3F6_@FR!vR zw6`*9kSM$3(jEeR1ji=rs3NCP_%X!)2!L&e z2ALHPZTCUnhO}tdiXXd#e^*~$pYCvb!UG^emEBwq2tr45nTh3A6Gx*Lg~N{y_d%`b z<#h!sW=1AsT*B}h(=R{1ee24QCeC>$=zR`2zOF;rRx+0?xeWv~fU~I*3nw@%7-+U4 zWy;0L1$xj*jCX~J7FJed&%+}41)tbG4#+qD^5QiP8Gl-sj>}RRsN1c-Rsx=%Gl(Hz z7R4neR8&eIe!N|Ge7N#%!d;SuMR61F-4dX=X&NEbso7ao;KKkd4_6y;lxpQNZ)4Mf>qc90s`@y*{of7(8Q;v>~nT0ae z(&q1`e)T2s+I`+bg2mqASIZGi2&et(qrC-&v)fA}(GiO<6`8*P%VaBH#!fDz5W6~P zPog!wNPLxDme8U#cb?4kzF@#ZpGoT0q(M&xwpkm>3-k{{BP7&7!7tHVpOPCb519ohUt&zF%^qUJNS%|m+N610zzkb=-+U9DM<#3)YEYxG2aPN6J56%{b($4@# zm3XZu&yJ)wOIAVUD8ml!|7jE+rDOOdBIce|LP$)`R;%YS)njRqPvJDOnAd*t$3{}$ z51$wrd83tf3jmd_h@_0{CF=w(+nEc!JiS}V`=bwhFpGXcj96-$r>bSDoHZP1T5rbv zY$CHDpI$1Fq}|gTBos*;VyIGmL-=_cLr`(lJ@q_9*xTs1i}BSv0r>r`X+6m{n|Ry$ z8QQ77!y!UI)e87g299<3LB!j1K z%~5Jj7rHC~0H*i#WHauNBh@&oW@0>CVmZcLUIo;C*zowhQ={*t(t}tyCD5HBJj8a% z;d~{;uBaI6&3R>317GG%(@(= zP;SO$3jM@!-jXNH8i2TKviPZ~NxthMCMI5jXSdq+=4QIfDkw0%5L48Q>*kw_ux!1f zRP1QP(xI3|MNQ2CMihYdi}nK`mbZ|mZqD`k85*q+{8VA#=TBIdJA&d_NPG~?w$U}H zJ&U2xCV^4?H^e7*N_s4NOEmNQ_wOtq(W%5zWoG(L{+cO$6{0R*^Kn4<-KPe7I`C6W zg3ILi$nDCzO|^87!%fwZatk`8qR;-Om$II6nZ96C%~K0C&8*_Ue2;&mmPNG>)xL44 z{CJQUiMZwsx7;-!47u)g_gnkD2?ns{3fs06nUc_3UbA)&H-t4Y$tlkOyPybf3OQEd z)9d}i61Yv{N_jH*R0NVY;r%yANE8(nhu%(S`QSg|gG}s{gt+UYQEDP+n{vXbJD*a8#~G0f>I(0#sg~^T?*rvjqK(Q(NlZ+PkEyS}zjZE9&@s;dUm!wOMg~|d zHAUpy1Z8Ne%GgJYFGVJrqs%? zBTIwcGf7s8T!O@vM416FXyO;GKj(rhhBe@j zj#U+@b}h;wy^ZT)Q&bK#%&qqRe^& zuVkh%*ZNjyy%UGnE;!t8mwid%yu~%kP?jK`jaqVvk?witFLW^U6Jz$`rCyH`0J z7}8yu3fnq1J6&1OYpE&`+zw9p+j9H|eR8+G$m?8XG}WK!*#|Jv`9%#-Y6~2!o@pUv zv@Q7+`28RREf4hsaekR!;3@meZ0hjxHJ5Eh-$$z6-c)sMgzrJVh{|^m(i(H+`=i1e zuO#)KF}ALsg$l_W2+=f&t`7pQY7iE_k}LJKt%(T^A8l%YI!mDl1ETsh-$)v}Wm5n_ zb|r)}W{uM3uyi#QAU)z+6|`3{ejkFT+3<$zXfpbdav!)52pQ1Sd)(6?G z+h~udx`qS4YDxvrtK|J$S{h3d^oEjfQ5liP)s33^8Q>V4vLk{W-(|IdcA4D|d3&AR zR4zrQ&OK}!aiH6_{ft+zv#bPvFOVkK}tUr&LcT|@}Y&ud%kNY-%LxeF(6=fL^v>7L}@ zaP(`526>SL;*ak=+CZ`kkNNc)l&fgSw|cez%_aW0?XSo43BzM;^<Pb=gUJZa1v!KLBT7-OAR;2d_Y$#846D!3bU!W$k3-zu$2|~_!3hEu zKG4M)7xnt+Q}i1f8l1tz0Yz(A4{#oVtx7`}3eyYSseUCT8|jkKz$E5Ie+EF(fB-C| zUU6SszRlzkaxRSLV_7%Q9>D~vweKJ7+N!D!oI=xZUf!pxol5EK=>or&bvpG%i!D99THzyzR3Jh2RXf@C%zy-IO;3L+SYqsg zV95efB{YGOiV7Vay=HGdH-iC@^q#i6WrhXTR|<#ywciV~zj|(N4m3x6S2`xFPhegh z85)wmEbw&orm%+u4K;P_d)dy9Z{dld*y@#bbR*iZa+W|&Y%{=KCUady6-Q$<6KhmE zS2j<}#)z57=OQu(1_xwSQO8rK8@xuXi!i+u`(N`lxd_T&CR6*4*8ub*L9TP)l7_q2 zdP*KDtWWtjl^0FJ>rLqbt{hO_xUvE(d_6L%v>0wbKT1TRN1hV^JNag%sb+^Y&IuVDR1lpgze=v2l+fo=^+Eeyx!j4 z_V$-HP(Ak9)F3#O{nyFkvdzAyavVH6Y;6c-n_GY2YyjKCs_B2SLNRR?Au z$%gub@@(bkZ0EJx>!*sQwkjywByYmP^u&b$%uvt;1O`(0r-UsnEqNRtIw}$}%W(?v zp9YRUCdPF9JPs)k>GbHb&! z1NAC@LyvlJ)0UY3rGx?~quq;!a--XHmRfvB%xjRk0lTVe1ZfDT-2yQd{6y(!l2HuT zh>2SlV^khu4uI16MK0x`|BDwFa{4}h{v5H1Rr)(bXGv?H1I_3pibhA_H{8S5Yo^_8 zl!4`4D(7-^P%)S_Qwh-m%97My!Z6n786F~VHP65)OS%M$41%#*w>Jhsc%`d&8q~8y zw2(P)Hd*Qa2-RhL#lOxn7eK%?%R)HU*0%l`We2v@-aq*ctTj#Lw$Mq^L6!a^;4&8i zVEZGOMz@-!(VYDS=jfDn!u?jz>n|g-O)k5WCeIzgnjkEX_0_+keHpct*?DT|6NA?7 z<)f+ZeG7|YWv4miH0aad{MCO|v-NU^T;bn+XlaC8dXjGXW2^JWOuK)_{C~gX zoyM<=`zN`F_wSsQ-!d|sPx#vjxKQPK;g5z%&j{FG{VhCF+-ok~I`BV92xzeliGMwT zYn(zf_#!Fq;OEbNhko>o-}HYJh9)Z?8lfGz(9aor(8C zX4bzt%&=A5qyl?xp+9%_`*-;wJz?qe)`+1BR1(iWZ<9jk7D1rMj|HOxTdKER3@gvQ zq%(hQ^Mk*K;;}O6Ek5!jE2Js$_a^+S(XBB92r%jGIC?16_u#9>!yjqYbhQ-CtMGqEt_FX4AU=B~QWcIQkW;Y5|d8BZP9< zuUPc|0xtd@i4%Zzib0SF=p>W(w!jSk12q0uc=I1SJwtsJ*wXd31LqkJwE?kVnDWGHC9*IP* z{0A-qMNV@tC_KFPaDO{}x!St`0b5@o9FuSc8U9bIr*BaH0(z&dgoa}Vj?2ZVnKi4$`J9S z<2XY=Vpq)Hc^p_Zp76JDWq{=6UD{_)c% z4sfAEKMW`|cS2iNyUGT|8 zr-OzqiZte~FO{Ct+d_hkMc5dIRZt1b7=tOHqM-?gJUkt3aD&SxEisX-wf^bB&KgvY zAESPBAn0FM{obgApH1Q;9VUweE%b!BufqxUzuYe1b=eB)2@MUEk&($Wh)=vRe}chJ z;^mW!w{&c$=$vajB;+#Y0;qvcfl47-F0N z1je%&%OJ9&Px%I?;y^^qDc&(1@9XQkB^(f9=@tbt<|TzKZ!xxQDdq1}ZD5r~y3#4pCFQpy8FH#asInzpt%o@H>N|@W~Pd^=%z6>Vs z(|lMId++AWZ#CQFS2RI8hEWBltn>^m41qS75;S_do-uH6L`}>8RygjaQeMgS`2%NQ zz4bbCK5Xr0cdB``K?c+g4d}q+`|#me#soO7Aytfq9u^)xcacsY-t!c-#AqwPKv@?7 zMo6Dmi;eOHQ-aNtCy#RP=R@rNE9w6UGgL2?i;(kG!JgWf?PM#vZ39Sm!hK)bRCy9m z5T$-ZlFtAj>U7I%5uY3CC=8uCK)jS>3P6?sQ&LkI)$8Z}CnZ!CTKhoq8T)FfZ)%x7 zWU}YVj}!hQuq*2WRf3~TVH*8Q_dU<%0oH9D%5OfkB;z46+WOLL2jX0|AQ%`F+S=M4$Ox*(xqnx?!Pb( z(v1Ic(=#m^FuVY09~;w#66=5A+oL{idE`3g;{P3(5l!8KlHSdG{{$h|{{&-5E#U-e z{6pf=-q0}jF94~7N;i~L!ni%r|KY1hjt=$X*-dS8b90y=SWSanYi;P2lgcHOfLn++^}bnI zOr1rREaB{k-RbF=>3`Qc;e-s*H{g2Vv~YdlK>+gX3Si*VdTP-B^94BWatg|k_15|q zH`CPMd=AvV(eIv?(4hd26hZze-Jh0Np`pmR|NpLyoa4x(m6j%!kD|tRTHJ@<1E9a* z#%f&yzQXIQ1{Wlu5Xi&Cv^;Ud@B|bA5R|eBP%Q3?6`h_yLLSA~y&TLR^Bz&;48Yh9 z?m6B%4x}&w`_~-uMvniGA@Fyo2+XJ1ogso$!C0k;QAA|NV==Tj@Xx>f@y zBDSjThO?cHj@$C7BI34JpF=3h#z1*=7D-Hge+$%-i#RyOb3nOk*T39`p9pZHT1%UR_;sJ=Fq7J3?9{6`*~C z1bl^fzKZ%W9@Lh-IZwSW{OlCxwuTxb$`rq*)wrW?1*7Q+&VM}r+5mQ&54lf0%) z3N|G^9# zC5-1ISOkd*oEYw)14zIx6NJs*(l#)b{Ne~zR|PpFx(dKLi=xK$7ovk@|KpC zz}Em-2EB;+L0#Q3sE1T@|4njfz5hQAV-p=gRaHEXUuzVlF`bGh zRH`juR8Uio(RQ`O`}h_L$%Kp=eFjl&@JG&`N+ROLix)THxZ5jAwro`>#HeY=F-x3^ zIlWBr-lwogo%B)JX@r5(j#*EBwM4|IUeeG9E25m9l&oxKQ!juYDhGBGE~wn_6$v94 zG>L&?7-k!=TTawUvx;D7JZl)kq5|qNLf73pslRPgyLXcpjYklzAR0 z=U>`H(|DxpeS`MYW`cAF=jD_oBkp76nTDJZ244|4g#Y6{q)Ry0)FO+h3oZBh)P39& zI}U}KvYAkgC!t#Z&GP|&8(}<^%Q*V5OuUpY*#JX7aSShf{{u9f{KQz-b$AD))KD-E zjC}q)3sb6)c=DrL8gSxR+N214d|DnJ$G{SyiYPBT$BO*Du3`9$-K3}=9JruAII;nH z8X$GCX_cB%T3aojuey-;>eFmQBPfC$UF;0fZ4^ds%W~X&6|9}C^i@W zT3hDN;ZzrsW_ccD0a&jfsOaM<0D1?rk67Hb?5mL^OS}iT=osaQr|O+geP;isw(E>) zYF*P2Y{!B}q)L+`Tm*y&BGLq;Lx3nqhX8^Uu}}kqc2tliN)IC4(3^mO)F>j-6bT&! zq=`X_0Rl$aygA;PbI-kZX3bi&=1+cP?VY{%x4-g!PYaNjo7K{wKy>+c8E!wPl)s9w zfxHp;2a9b6Mw;O-3c#cPt={`*MZox{TbEu9fF{!^mX0$3Jdqu&)ig3W-NP+>(7`YS9@Uc~)u1l5XoxQVcLQAOQfwH~5n6ScMlX5hT&w ziNF%g<_~~`1tKZ7zEkY-8SNv{uTRbl+k{2E|9RpWeid=Xy`v@8K{8+pB(pMnRW)k> zqJWWsVZM{)wCR~sr%pkHUGgvXF=z-_3;C~rwWDm(M&gVuqpSX#*Dgo_Px6UKn|h=~ zcwF?$9;%$jXMm6l!A%c!zfM*qcEKFtFxc7gpeNC(xJ%FNqsNf#bpk{H7D?$aEfgxw zp?w#)acQeP=sWIx2m&dH-c`lr|cTPwv!Em%le9DRl`6 zJIjU}2m@qLP*8pXD)Bd8*gkG;ZZ@;Uokk}{7YqOj<@9Q>F~Bc8wWI)O{`ma|4kSxC zGoKBlykS4*(yyzfWm5;Lj}4F=2~$AK4eVB&R4H%;Kwt5KMOH(CZZGfv4#EDkQ9&<& zBEp(ygh;U03H)o8tqQf~OY7nATcQ=5fA6U=Qopib%;OU$7-erUGNUX zf7>)H-H%h5+}z!P0_4`F`$m$wTc8Ki4;Z5u>XM=MmKM7>z|dXsTaW>Y8#;r5CslSn5h(CphUSc4t2EP8W0NQd~%*n zaLe&8{x$Z)A71BRokT4HfG?=r41cslamA-Io`R(5qggX-Z2q~U_s z9Lq?hb_V99@g3X{LO^I9bwR_^^Lg7Q=k9EvHucE>wy=m?ae{69rdA2Zre3*F=yPLd zNG}3TWH-taX0g;p;C zvph8l`oL?PXMFM8R|`!`Fd+xn7keE~ph6#Tn0y!;d#{@>Sprc}F|z|Wdj8AxIqGsp z)L`|%!-wi%$&kH0=I+beQSI;!Q)o?$`Iz?AqR|LR^F!WckQckGb-WeTJ!0=BFk8r8 z2J%zDnkurIu?J%c*t@~-2OVj=&Kvy<5a}2~Apnav)*;Ks)6Fg4v}_XUeCKKqHA7Fy zJezUj^u6Id1OnlbX!Ng=c#b^0&#}URJeufU-N!Y{q0RZ-BM@UIf}{PJ`UhOwolwn? z$7k6+zxLl-{Gi>!%*@nLVfNxMmo)CvOI!E4X93%^Nq$w0)&;ZC49rz9*68zS4y(qb z1Uz-L6~O1Q3x_>ZJC>mUetm&}qoNN(PUQ^%bOrkeAgn=>s2kY~r6QeAla;l4;dP)c5R6k^pzh1vP;NlPHyV*%8DcT=t;#&KZ^RGg4=yjlf|CDDSc?tbH6cCRqE%r(OS{w zv0Uw6hymno+n8=jNs632OXVpx4c7EeRCCw<_UOR_!YG}ug%Jt3J4_=$I+q4+Q3n9v zi5Ihw<_hZ7z6e$Ok}3%LTLdC}0M3nzjorNjT^=@>z`WExh?U=|6!C-z*qEPmYR0ll;DE3NI-sPz_N&oLc;EIAZ zVr_YuOqvnn--#Dauc`ApbbR$Pq;@g!Y@bZAxG{e|er4o#5X13nXqWH zoTk44P)~iy?X~T3?JYD~Pa~M##H}8ea18ghxiEM6U*iY++m4*a|4J%xT)MnsB6V|T zFHa*xnsqLY%e0n-89GsO$dS0UapYP_j^4d|)W12HmMw;nbcIgaL0C095i<>lBo<*~8fU2W-EdU^Q3ynK^syu6bEl~>;ES?jo; z*m%&~)1gSnwZjQ zxG98(wa;a`)h)gPOm;B9i2kw(oHKKR(~cGk!}KQbpJ@*$XnOVPj@p%ZR_Q!Ee`^3$ zE@-=HHeIu9$52yASdYy)$3Hw7r)Nr?Jl`Cu|A_gtJN4?wh^nT6emkmIifknP-_!H+ms8|L2X$<-_q z6S>Yg~zb>c$iWqli+xu9p~d3p=FDo8(}{vL&$jL$dkM}>G$#vlI%xL&C~ydCmp8HqTzWpkVz`-yv^6=%5MOvXT;MNYpj2$oJ0{35nbc@>}OSMh$rDR`2FA zA1h{IKT0YdQgW%NbSZc4pXalvOO~?gf7pE8v)IGy*5i|r&4LjpPJDEGTgr${xtAtw z+pOGv>Q(YJi5@Q&*0*Xpge!r;9>-*#dK!t89sZ^E{70;%qV-}&fYN&9TfCp*GLx)Q zde^$2Ke1{3&FrGz_!48N+>sH0Ix70@h!Q)Bm1svE*J_J5K0oW%EuO7~OtO$_Ajrw#j7$7Kb!!qYNJ{!mwzNbk zCG@tn4+l&(53Q{c`+MuzIIEm{I@aH%g;xE@&kg)etr_3Ld5j#96Jrln72*vipQ%-H zBY+={_6jmG9EocwDJq=fgM&EAq|f~KLEJ>hP?y++)ei$%NW0^atM0q~NG|>grzh+; z`7i0Tv}$=xJhzR-qz2(uOLk6@5lNBWYs;u zHBb_uVeI28-oWcSZ4t9l%;z^RUrHR~=5$@V5oC`MtYMW`tg>$xWQ5}X>GQY7$+;#d zROB$h<@)tGV8F_iL`6ih{XGckQ$1E1YXpj7oH`+Kj^Tku7bxEkXck89SJH;Dl zMtqdjVXH04y5*gkr`bE>En_rW$8ncAp2t>wZzuy}+m6$Wt=;&2N4y&gQ(|mM*(~He z9u$&GcdT7gzTr}fJg&E&H*IU9sN~h4;5jKz>c^Ukc7ERL8|^h=Wk$xI@x;E`T5*oL ztc1_xYaO3MRrv88Rv1iQcQ;Sn?bj2JYHQz{nCy&AQCc~?Bt&m$m1bs6{P+bCW_Eo|f(_n)z~1Sci!Up$Sa)!^2GmW zUlfp-A@}dt5`ptU4h}6#rN#OAXLlZP@ez+6;+6CHmN6!XTN;kVR95b@L-(9PatcrN z84*I`2?IGrqmSjwA1r*f(uu*GakRtHwn8!fZm(gdScapnSKr!FM|Uw)h%U^{&s!0< zX(u&@A6S(oOizrEV}~{&7!P8OK$I)7*te&!x|*1gp}Z8L#zpG*n!4kv@tfe^FM}6T z$Gu94B3H7AJbt|{nbAO#j2x~zf8KrDaq^s;ocOLB3C0Tk28A@qsq^**k{By>+=+%~ zmNA%)@U_n-Mzmw;UT=(VFZs1R(GhRIzj}2s;RNYm2P?TU<;%_O)>fx$*IvFjd#uRj z+c($}_9i5k^EWW;a#`|g^YLOO-&t*PSI3D7;hvE>{b)uZk(X_{5%en4EJ8` zj8bj7V`I8Eg0r7o2obkCBa`Jm3JuS~hI>GqXDTi$({6aZUY=P-;|r7_V@)``bFvHa zDZn(Lti1fC2?L`;>7&60CO^j(*FBNuL@>!m~M}SIpQEGAdYXRae%gf3-wZQDUDr_kwO|80Za@Ph2uKF1tC> zHB+dN$maDc!bZECh5u+(N|ncqPC<`oJ869v!t{U?)2O<-bp4VSbxsV0)`Q4_&(7Sn zPm;~!lxDxJlG9jHJYJlLvO*xV#G+K!D_wT9w^uNV)_MmNmn#4KzOyqmVB^44sz;hu zh{`cR!So-M(v#hTdl0|(lH@(DUz|zm^kQPX^Ml25_6%{0Xt4dUwJsI2kQQs4MaX?^`Bn!Jqx-F)M2@Tgt9X&zRj7r=l} zj`;4`gVNRg7>_{t@9iJ*RXpz<)V^5Ejh3u~Jbq?v-dZJ^eeLt-1?7^z9?;{M5-}%P zSZ(bi5{>QpSufHbRWRsFqsQ#6pq)>R0U@`%Lnt0LB(RwIe)`?TQ;Hz&yobC8k>og4 zC(GyWT9KdMHzOh@vi#nviTIpAD5|W~Tgq0UAL7bOI*9nBK!9X9Uo9l!_myaHn$GeA z+^E|U@p&n0u@e{tX}CVOCEq#DYL->mzX;O}LyXp)PALrzA9jg5_R*e{KV$3q`Z-9VcD=?3L=klIzX=JgEHCHe z=Jq|Le{D|~-i7#GU7BDrSr)I=x(o5_6wD+f)ZNI&m-`Vfvtsp-Q9Tm6`itgCnJ^fo*uDk3NX(xM^=0xB>_ONoepNC^@u-74KEA|fIojdXVoNC*Zc-7%ze zcjvo?P(0`SzW05v>$|?|`{Nw-nR#aRv-jF--S@rjJg=hoIoHDI3jlhA0QA1 zo#8+BV+Y|1za85l_=C<^=%KNy;WG<8bq!;Lu)2ZzizmkFYUiI?oYyioerCkM#Pm$> ziGi_+z8<5hp}uK#IVA#dpha8yq4C~z!~ysm^G_4fVutP4PJS7a!z*B6zohLDJ$y2< zEI{K>`eFKj=ob5|n{sc(EYj5~w`?D9#Ei%#=SkDN?6LpCB#|~#-6py1J&^U@sC0;9Em3*h{*u5kqp3T5*W})zTX*!vxQUPOO|M*0{ zIoo_^!Eka>797EhfL2)#yuRy|n_lI3=kF+mK0W8=sKt3}YSjJaQ8a;BeLM?k$*WvG z&-l7C;}u1lggyFe=T4;4*7Y)5sxJ7LN2p~NvtYU7`qdU)vxzibyA*w(M&trB+S}>$ z=U10nMw;Va9bTS$8DB(fD<}CipCXxEO-K2Rn9*#<8@iyD%{XPEEKav4D~7mZH-^1# zQ9XZsllFB`^2NxOuwhz!9&OKgQ`)C1FPf~JoSkcqWWW2_^*Mxb-T2qmi(mT7^eq)f zmVePj5m&GNX!vDe*C@~ah8lS--@buqrj3?D>HDhf393$lps8%^*i7atFHe$7_a>H_ z6_e?{<}Cf?_;gwROpT#!<^jLwN$&?Q++(qO$U~&~X(`#;k$^bmFojR=8{4poB;iN} zy6UIh8;_sfnwkp=VElxT+7XxNg#TMmaK?N-#U5NLFJ!izo>R{b9S z54mCEEWh}S4B=I=+1kLBPx5nhV=7!<^bn@F&I{Wk^qbLVq}}F9wUCR?itN)uw}A@m z#mP=x9vIxMAA`^IZP#b4`&fpIf;mj0 z4RNw8VF&`4nYi}+Gg7tlBs_z}sTPe6L%0-6X69bdBeQkXW=FQ#`hAG!K^$KRR z(QOWuLt-aE3In7#_#iN0X6rs&jy)l*PuRcJ&1E@HzPuF(SH_R&>HADi`N3cH`1eoy zUu*E!KjIAaZAYSfgHxX@PyZUcY&Wbmh!3;Ja%~~03d#M_gc*jy9a{yLx?Z7S)IALU z&;P*l`n3A-+)$02-P%OjP>7ucI#V8(_fz0U=8pySNYs5!p#{t|*oXGtQE$sJnsUJ9 z;ZiO6WY)bg3`<>tg?UGu+luyqH<)kZiwpK1=*Tg0<3=vclnxOQQ6gp3`y9d>oh%>N z%~2gZiXuiJUOlj(tC;EQ-uQ)!yS_0+xkjj3h&w8>F(N;B=*UqWc!I;!1LZF!6$uE? zcAFVR*+-diML%x4F3<2WW3st0a>t!73rmOn;Afa5V_y5b z(#h281KN7F|EI@A;d(hESb$sJ{QA{ZHjUY}bX>zX2L(9kdQds>@pLpannTq=^WIri zPvBkDOI=n|_$J0R+)FEj3Xa0HEgF_gi<4ibeeaBn;hSs`W8D!duJdQ6#J79NT|^-j zQ~e3aury_7*S#J<)&IJZr6h9Ulw-iFZf%uR>y=qt-u3&FuyE&kAB!4HehT8mT^0Y} zZo##+P8YMuOFW&37g*w#sT_JgkkU%;!<5$E(CkqwN!eYiV=7xZI+27rY^(>}Y{i#? zh{NV-8KNlpH3Lst75azwA9r;&KYWAS$lft;qIeWGHQ4pWomikppK%X8aqxj zzj(n<7q?rr^!CN zv9#j^AwN^x3eVYs((|8RcfsSC1flUN{jO(xez-C9s?KQS*q{SP)e72reR<~RN170J zqY|=fp|lHO!Gnlpd`pq4rLaZrqkNa}E+MB0pUMx%I!<>wXWejWV!3#}NVBHOZ>V2HOpHm}0c^AC5&Hj5`M zBf~v^zk0IMWX60UZ(Ct=eO=Gnk<=yt70^LxY3WL4hg{mqjdA%+%Gl zqQ6C@WQs8~ic5~F+A7$y-wz~TQT-&LxZV)l<07K-RCR09u**VIYN~5P*mV`R+n}0< zOhl)^ZB>G5`g1KNz>5&UMGv|Bj?0f?~GjmGhz#VJrUdpYTQJ! zlto**y7wOaC- z>advR-Rw(#WccNWAzL?Ayl+7{PXFWCU2f;TRM^Yu)n7AyqJ!!iY+_0(4q%! zcjV$?JLRfrL}{{8R3=^=D$x9Vm1F*6{}SmzsRtZ3D+7{g?HQWQfrhp{R<9lWGV$)j zR`J=3=-k#vE6$9>tf{fk#hZL2aV2FlXpB8=5~_b%r!Bqd1G!3haAy3mIT0PG2;Ii7 z+YLzP`ajxjF85vN6B)>Ajq;*1W79{AJEKg-kiDM$#A2P+ly{7%nBGP|Z%OV9v9+Yu zw_g4=#Jja(QW9K(b(!JtDIFuc$DRSLt=TE-s1{^ojM?T7%F7kQQNBpF%NP58cr|LZ zv&Gdp$e#H~!~3E^OdxivF)qWJb9qwPN}s9x&7-VwM#fE_PE(+ekV=CbdQnU#^Pufwn=b@0ZxgzsBOi8_%i{8K z(NOT(*vmr%(VM*<{%zhqmmxG23T;(OKWG;?p)4_rd_JILK2-aYyStj=w>5ZfrPG6M zIZ|Ja^!k}RwOBRi%-tAZvdbBbPpCXlTW$M*p7vp9lqg%y+HA$x6^}ZFEcFW67M1R$ zVj>l9s&bpm8(IJno<5z$m$<6eJbtF(`W2eR(Warn`4%r_(^CXNQ2&|k-IGtNmVSRF;RD7UApSI{SaemXx~*KNBtG1-}?s;Vjx z!o!efv(#w@YsCJd|Cs*PN{yYkh=_J`BC(B9y4rC&T4JSa1M-cBx3HJ``}>KRH9m1$ z$-W^upAb3Ns9F`UB_=Y`-<~}8l7(pYl`cs`xb^b1N5KSyWD@FU{T{fiBg4_64EnXaXpcD7~nnSNy4*dPf~Dw z4q%|YM|>k_U^F46x}qW>Ha1jYadT}7m+WTkIh@11OtY2#%>MrV-F92t`VCRW!?k>y zOclmC?OFOCxr^QCGSi;-mCVo2&kfbMEOvddYA6pxCg)A&vg$UMZA!-%zsN_g-oM1j zX*JfIbVFJ}0iC8QoYRgtav`oND9RIrsI2Teqg%$bZEkrH%w~ zS)_MFgvmZF&*KgeLjL#dt*WP#`%U=Mc z-B7Zm!a`z&WO;cdEK4P)||*qNO_87&klRw$?lt8%vv3 zMHX){H)yGBoqFs`luRW4uX?R$+j>b?*XL@W zEX)B)3m8QM&K8p_^_SR!?Ukw5HVcuGt;cS=eiKE;WBnQ3Jy7nGp;>eJ(j`c+PV(~d zv*K$eElM;k9cu95CEeN;rc&4o^7-a7ZVosK!_=%h#b+C)o#;kW5fBnaM@7{gwb>Ys za1*>Jb>AA7`cVK<-*U1ehZ1W`;`#IIO@c-V4V7}Yc~8Bk;6^vz)M=!h!42}4d!RJe z;pOEeOkp9Im8krMgNJAH%Tm`G0KZ{+eNtZR%X$6^T{cTf3d+1|;~B7t88#B9OGpjp zC)$@vZAg8#AyZ_IJJB}kAt*roh?R;Fmv$ab(0g*?-Bg&G=!+M#P%)|P`Z{AILKena z8c4i#+QNlgEa!)3ei$A6VXfYoYZ4*%RL6QK$gGIhSVQ@ESkvNwuZps=vcX%q2HdOC zsUwvJzuQW6KT8);-{R1GKmBKA2_yeueHp|Z8w5*c}EhN&k(_k^{n>7s<~>_?`g|ETPqDnJJofQLyu>(c^8_~z$IuwM~rFtz@gu?UYt z_8oHlcBJpfH|z|e@#$qQV4J+xl=1SfS$#X@R)gQDF@5NNd{GS5)@RoF?eL#B)JbD_ z?bplyAtk^|+_o*`_x61_=Kc^_Ed2LGhnXssQ-Ac$9Yztae>LZu{yu($lZ!{yl|NK0{q8~wWW_RG1 zUYEMe+MYA-%G7SCyr}u;SdH>C_tGKfX!Q7uM1q6JF*o1XsxOucxs+U2=;;%JQS7fZ znQoTt4D;BpnKLMVom)rD&*0$bFl+V9SODX;eLZa+hO{EnVIGF*{nrJUZ>#lWPQRUZ zDQ@T*{rS$5J*Uw+8O!-;IWkN^Ej^7nqbh+1_z^nHELUYw@?M1aQXw31Tc<}QhFEW! zFg9w~>ojU;X)UAmbWWOnTMmbZj+YD!3yag$FPO+`kKITsrNGaF0+DI8Hjyo-Xk8Bb zBiCfiv`yVNDmr>|M8eKff`#I~UX4Gq(<+O0{cD8}WbB?HA>9C1-o8Di6N!f^8wz;) z5oyq|{0<6k-v>^}ZCaDhPm^cBb~L_jEMokmM0a_y-Ec(aJ_{Gur|O$li+Vbzsp|B9 zdQy*!jQA>BUQuciW%|ORUhZW&fo3)AS_im3@&<>r|4Jfbi8*81m&e~;RaV~P==7FT zUTJ=0`19g4JjmPS%Lla{j<*a7IGvIV(rr#`3p6aqvE5h&BA{&2B-8lt`OK9=M^Cn* zbmb%^PwT&KI(unGuV7}|+4V5+9J6=bao{VvI-4bfu8 z^(%8jQZ;F+r2$rrp&=)W7RHmQl7*FjB+6%KS#^AVPEAd1)@eedFJ(bUWnpoaj+XY? zWWn@z?93n!52~7{Cf7@hoF_0m|8#7B19IcudAG0lDB@7Q>v9_LRfAI}?cFawD3sAh zo(_}X-N=MJso$Oz<^2?r3shVK>vA84M@5YKuZhe3W{y1#9F1zFmQIKrfIJhePxm-8 z$j9e$gzPCwo_pMVy}gw$Nis(lzED`;WXeWQkaL>WE-p^AYX>R_-Z72{xkjgBOL#hu z(`+&^R$kw!DbZ6%;$lPbxf*q@?}eKSObHj4)md*Ls45lxF|m<$ccY}fcMM?3m*HEa z>5`dmS&fT};|VD!4BoFAV8eRFX?baB8;qa-GFQ#{#cB!AA*(lAT|<0zUEB}rWSa3_ zi$FF*@pkDe+Iji;T$Q~KR+I*xzVGzA*jTP(kKp&qxzT5auD!MrZChuca~6QL-Tf;Q z(hf+T<(@-zjKNRsIMHn@zFn=qf&-32yQi{n>lX+JNbbzR9LTU#HF=2$L_ z9>O~HcC9E{KtzIPB{H9)d#wr=82!Vl4Gjyj+@q&&kbi7bXDrcaH}jR-s(Ix&J$?ks z!a7(hzKUWC`|9H}-}{PNH1KsO*XUtW_ umjMDjW8l=26 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
a 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 E1M}_l!2kdN literal 33471 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�gmtVGMUt?&VKaIDL}1O}`r2 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 L;vWwrPhb8YNoDGd diff --git a/docs/sequence-diagrams/puml/lookup-account-name.png b/docs/sequence-diagrams/puml/lookup-account-name.png index ae44c61955b815be2f65d0873f4b0587c5ac1570..7b9b6b6542c374255fdf19569bd59c4db67bffe3 100644 GIT binary patch literal 7885 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 literal 8951 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 Jl`5JC{14rR+YA5z diff --git a/docs/sequence-diagrams/puml/offchain-purchase.png b/docs/sequence-diagrams/puml/offchain-purchase.png index 9d65a941113e9d6b542c08ef9e20c798e057a955..cfaf42fdc43a892e3ee8fbf3a3ef68fa0151288b 100644 GIT binary patch literal 28330 zcmdqJcR1C5_&mN7*_&)xWpA>>F|+sn z-G`KS@Av2X{r;}&cU|A>`u%mB;q`j1`@SFd<9^()mvA`2o#Jk}JY8-Fne4dL#TfCE zv`uvnx$5UT-+hhoHDx&|@22*VOQ!t-UD-trnPQo>S(W8G zvkx>I8ylI%ypJZjUn5bg&P_}A(GsQ(y2WgAmmtjd`LhNh&4EjN%D9JVIMkSrD-x~$ z(8kgCICMGAtM^N>Rkb1+sg1_^L*pvcr}EL{s7i_>@|ZwwZHcx*B~lKZ0v ze~IQ8k`P^_bs29>pY34RylY!Y?q*C{^8OQM7xP@l>t<>gsrid$hl!t=_?j2g=!8bf z`5BRMTIsnDTYf)D@l1jFSQ6uN8m^b4b4&L7)vuR$pPbMMPJDN+Z!>Y}D?ZDOm7Djx zlXaBCS>1IWULFp6k-ys3gA?$Pk>ylDmf*m9OMTl8jMK)!0EvC04EeLH2*l&tH?Lp4 zYo-3P`-s&^ksiV6C%PxD9)5Q2{NVZXPmh-!M3N~=-X}Wjo9LJ)fIiiButBWN(%$^@ z`D>0MVPtIkEZ=^mJLAgyD)&|5*`th=qGwc(Se_NzPfpeBwPEEIGX;6)a%=*=LbV);l ze3nDir#JB6cZlB z+55$%iju>l5O@7dJ^Lfv}es+5~Sm8QW?6~m#ey0j1+>k0* zDo4jYS)TLzG7kaf@K-Q$$05->cD@kY)=#=K_Myjmg`4l2;e2=2ov^Q^D{5(wDqq2*LEe! z){Z9?3RK_=yArgJqJ(Xmz@Na)aaE%!ku}A(D0tH+^=of$VBdw(M^M7c9peA_9+pZA zwo`^(F{?uXvu*0O8{c(Iqi?S)U1P4}M{3siFZiv+Y67bxuh-YDSNU^r zx0kj{YtncNmWhox@IRkd8Foe5u_$<|1D5Hv7VHe
Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/controller/struct.ControllerContractRef.html b/docs/casper_name_contracts/contracts/controller/struct.ControllerContractRef.html index 3c6fdc4..ce565cb 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.ControllerContractRef.html +++ b/docs/casper_name_contracts/contracts/controller/struct.ControllerContractRef.html @@ -1,30 +1,46 @@ -ControllerContractRef in casper_name_contracts::contracts::controller - Rust
pub struct ControllerContractRef { /* private fields */ }
Expand description

Controller Contract Ref.

-

Implementations§

source§

impl ControllerContractRef

source

pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address)

Initializes the controller with the registrar contract address, the +ControllerContractRef in casper_name_contracts::contracts::controller - Rust

casper_name_contracts::contracts::controller

Struct ControllerContractRef

Source
pub struct ControllerContractRef { /* private fields */ }
Expand description

Controller Contract Ref.

+

Implementations§

Source§

impl ControllerContractRef

Source

pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address)

Initializes the controller with the registrar contract address, the signer public key and the treasury address.

-
source

pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes)

Payable. Buys new name tokens.

-
source

pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes)

Payable. Renews name tokens.

-
source

pub fn buy_and_renew( +

Source

pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes)

Payable. Buys new name tokens.

+
Source

pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes)

Payable. Renews name tokens.

+
Source

pub fn buy_and_renew( &mut self, payment_voucher: PaymentVoucher, - payment_signature: Bytes, + payment_signature: Bytes, renewal_voucher: RenewalPaymentVoucher, - renewal_signature: Bytes + renewal_signature: Bytes, )

Payable. Buys new name tokens and renews existing ones.

-
source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

-
source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

-
source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

-
source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

-
source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

-
source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

-
source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

-

Trait Implementations§

source§

impl ContractRef for ControllerContractRef

source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

impl SchemaErrors for ControllerContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for ControllerContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

+
Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

+
Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

+
Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

+
Source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

+
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

+
Source

pub fn pause(&mut self)

Delegated. See self.controller.pause() for details.

+
Source

pub fn unpause(&mut self)

Delegated. See self.controller.unpause() for details.

+
Source

pub fn is_paused(&self) -> bool

Delegated. See self.controller.is_paused() for details.

+

Trait Implementations§

Source§

impl ContractRef for ControllerContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for ControllerContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for ControllerContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/controller/struct.ControllerHostRef.html b/docs/casper_name_contracts/contracts/controller/struct.ControllerHostRef.html index efec89f..dfe60d8 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.ControllerHostRef.html +++ b/docs/casper_name_contracts/contracts/controller/struct.ControllerHostRef.html @@ -1,82 +1,104 @@ -ControllerHostRef in casper_name_contracts::contracts::controller - Rust
pub struct ControllerHostRef { /* private fields */ }
Expand description

Controller Host Ref.

-

Implementations§

source§

impl ControllerHostRef

source

pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address)

Initializes the controller with the registrar contract address, the +ControllerHostRef in casper_name_contracts::contracts::controller - Rust

casper_name_contracts::contracts::controller

Struct ControllerHostRef

Source
pub struct ControllerHostRef { /* private fields */ }
Expand description

Controller Host Ref.

+

Implementations§

Source§

impl ControllerHostRef

Source

pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address)

Initializes the controller with the registrar contract address, the signer public key and the treasury address.

-
source

pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes)

Payable. Buys new name tokens.

-
source

pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes)

Payable. Renews name tokens.

-
source

pub fn buy_and_renew( +

Source

pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes)

Payable. Buys new name tokens.

+
Source

pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes)

Payable. Renews name tokens.

+
Source

pub fn buy_and_renew( &mut self, payment_voucher: PaymentVoucher, - payment_signature: Bytes, + payment_signature: Bytes, renewal_voucher: RenewalPaymentVoucher, - renewal_signature: Bytes + renewal_signature: Bytes, )

Payable. Buys new name tokens and renews existing ones.

-
source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

-
source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

-
source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

-
source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

-
source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

-
source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

-
source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

-
source§

impl ControllerHostRef

source

pub fn try_init( +

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

+
Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

+
Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

+
Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

+
Source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

+
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

+
Source

pub fn pause(&mut self)

Delegated. See self.controller.pause() for details.

+
Source

pub fn unpause(&mut self)

Delegated. See self.controller.unpause() for details.

+
Source

pub fn is_paused(&self) -> bool

Delegated. See self.controller.is_paused() for details.

+
Source§

impl ControllerHostRef

Source

pub fn try_init( &mut self, registrar: Address, - signer: PublicKey, - treasury: Address + signer: PublicKey, + treasury: Address, ) -> OdraResult<()>

Initializes the controller with the registrar contract address, the signer public key and the treasury address. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_buy( +

Source

pub fn try_buy( &mut self, voucher: PaymentVoucher, - signature: Bytes + signature: Bytes, ) -> OdraResult<()>

Payable. Buys new name tokens. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_renew( +

Source

pub fn try_renew( &mut self, voucher: RenewalPaymentVoucher, - signature: Bytes + signature: Bytes, ) -> OdraResult<()>

Payable. Renews name tokens. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_buy_and_renew( +

Source

pub fn try_buy_and_renew( &mut self, payment_voucher: PaymentVoucher, - payment_signature: Bytes, + payment_signature: Bytes, renewal_voucher: RenewalPaymentVoucher, - renewal_signature: Bytes + renewal_signature: Bytes, ) -> OdraResult<()>

Payable. Buys new name tokens and renews existing ones. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Try to resolve a full domain name to an address. +

Source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Try to resolve a full domain name to an address. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_has_role(&self, role: &Role, address: &Address) -> OdraResult<bool>

Delegated. See self.controller.has_role() for details. +

Source

pub fn try_has_role(&self, role: &Role, address: &Address) -> OdraResult<bool>

Delegated. See self.controller.has_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_grant_role( +

Source

pub fn try_grant_role( &mut self, role: &Role, - address: &Address + address: &Address, ) -> OdraResult<()>

Delegated. See self.controller.grant_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_revoke_role( +

Source

pub fn try_revoke_role( &mut self, role: &Role, - address: &Address + address: &Address, ) -> OdraResult<()>

Delegated. See self.controller.revoke_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_signer_public_key(&mut self, signer: PublicKey) -> OdraResult<()>

Delegated. See self.controller.set_signer_public_key() for details. +

Source

pub fn try_set_signer_public_key(&mut self, signer: PublicKey) -> OdraResult<()>

Delegated. See self.controller.set_signer_public_key() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_treasury(&mut self, treasury: Address) -> OdraResult<()>

Delegated. See self.controller.set_treasury() for details. +

Source

pub fn try_set_treasury(&mut self, treasury: Address) -> OdraResult<()>

Delegated. See self.controller.set_treasury() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_signer_public_key(&self) -> OdraResult<PublicKey>

Delegated. See self.controller.signer_public_key() for details. +

Source

pub fn try_signer_public_key(&self) -> OdraResult<PublicKey>

Delegated. See self.controller.signer_public_key() for details. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

source§

impl EntryPointsCallerProvider for ControllerHostRef

source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
source§

impl HasIdent for ControllerHostRef

source§

fn ident() -> String

Returns the contract’s ident.
source§

impl HostRef for ControllerHostRef

source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

fn env(&self) -> &HostEnv

Returns the host environment.
source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where - T: HostRef,

§

fn address(&self) -> &Address

Returns a reference to the [Address] of the type.
source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
Source

pub fn try_pause(&mut self) -> OdraResult<()>

Delegated. See self.controller.pause() for details. +Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_unpause(&mut self) -> OdraResult<()>

Delegated. See self.controller.unpause() for details. +Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_is_paused(&self) -> OdraResult<bool>

Delegated. See self.controller.is_paused() for details. +Does not fail in case of error, returns odra::OdraResult instead.

+

Trait Implementations§

Source§

impl EntryPointsCallerProvider for ControllerHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for ControllerHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for ControllerHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where + T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/controller/struct.ControllerInitArgs.html b/docs/casper_name_contracts/contracts/controller/struct.ControllerInitArgs.html index 25880eb..39b1f99 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.ControllerInitArgs.html +++ b/docs/casper_name_contracts/contracts/controller/struct.ControllerInitArgs.html @@ -1,16 +1,29 @@ -ControllerInitArgs in casper_name_contracts::contracts::controller - Rust
pub struct ControllerInitArgs {
+ControllerInitArgs in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct ControllerInitArgs

Source
pub struct ControllerInitArgs {
     pub registrar: Address,
-    pub signer: PublicKey,
+    pub signer: PublicKey,
     pub treasury: Address,
 }
Expand description

Controller contract constructor arguments.

-

Fields§

§registrar: Address§signer: PublicKey§treasury: Address

Trait Implementations§

source§

impl Into<RuntimeArgs> for ControllerInitArgs

source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
source§

impl InitArgs for ControllerInitArgs

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Fields§

§registrar: Address§signer: PublicKey§treasury: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for ControllerInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for ControllerInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/controller/struct.PaymentFulfilled.html b/docs/casper_name_contracts/contracts/controller/struct.PaymentFulfilled.html index 1859c91..80b4709 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.PaymentFulfilled.html +++ b/docs/casper_name_contracts/contracts/controller/struct.PaymentFulfilled.html @@ -1,22 +1,32 @@ -PaymentFulfilled in casper_name_contracts::contracts::controller - Rust
pub struct PaymentFulfilled { /* private fields */ }
Expand description

Event with the payment information.

-

Implementations§

source§

impl PaymentFulfilled

source

pub fn new(payment_id: String, buyer: Address, amount: U512) -> Self

Creates a new instance of the PaymentFulfilled event.

-

Trait Implementations§

source§

impl CLTyped for PaymentFulfilled

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Debug for PaymentFulfilled

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl EventInstance for PaymentFulfilled

source§

fn name() -> String

Returns the name of the event.
source§

fn schema() -> Schema

Returns the Schema of the event.
source§

impl FromBytes for PaymentFulfilled

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl NamedCLTyped for PaymentFulfilled

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for PaymentFulfilled

source§

fn eq(&self, other: &PaymentFulfilled) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl SchemaCustomTypes for PaymentFulfilled

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for PaymentFulfilled

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +PaymentFulfilled in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct PaymentFulfilled

Source
pub struct PaymentFulfilled { /* private fields */ }
Expand description

Event with the payment information.

+

Implementations§

Source§

impl PaymentFulfilled

Source

pub fn new(payment_id: String, buyer: Address, amount: U512) -> Self

Creates a new instance of the PaymentFulfilled event.

+

Trait Implementations§

Source§

impl CLTyped for PaymentFulfilled

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for PaymentFulfilled

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for PaymentFulfilled

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for PaymentFulfilled

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for PaymentFulfilled

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PaymentFulfilled

Source§

fn eq(&self, other: &PaymentFulfilled) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for PaymentFulfilled

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PaymentFulfilled

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for PaymentFulfilled

source§

impl StructuralPartialEq for PaymentFulfilled

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PaymentFulfilled

Source§

impl StructuralPartialEq for PaymentFulfilled

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoEvent for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/controller/struct.SignerPublicKeyChanged.html b/docs/casper_name_contracts/contracts/controller/struct.SignerPublicKeyChanged.html new file mode 100644 index 0000000..63ec37f --- /dev/null +++ b/docs/casper_name_contracts/contracts/controller/struct.SignerPublicKeyChanged.html @@ -0,0 +1,32 @@ +SignerPublicKeyChanged in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct SignerPublicKeyChanged

Source
pub struct SignerPublicKeyChanged { /* private fields */ }
Expand description

Event emitted when the signer public key is changed.

+

Implementations§

Source§

impl SignerPublicKeyChanged

Source

pub fn new(new_signer_public_key: PublicKey) -> Self

Creates a new instance of the SignerPublicKeyChanged event.

+

Trait Implementations§

Source§

impl CLTyped for SignerPublicKeyChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for SignerPublicKeyChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for SignerPublicKeyChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for SignerPublicKeyChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for SignerPublicKeyChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for SignerPublicKeyChanged

Source§

fn eq(&self, other: &SignerPublicKeyChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for SignerPublicKeyChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for SignerPublicKeyChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +to_bytes() or into_bytes(). The data is not actually serialized, so this call is +relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for SignerPublicKeyChanged

Source§

impl StructuralPartialEq for SignerPublicKeyChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoEvent for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/controller/struct.TreasuryAddressChanged.html b/docs/casper_name_contracts/contracts/controller/struct.TreasuryAddressChanged.html new file mode 100644 index 0000000..44c27c3 --- /dev/null +++ b/docs/casper_name_contracts/contracts/controller/struct.TreasuryAddressChanged.html @@ -0,0 +1,32 @@ +TreasuryAddressChanged in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct TreasuryAddressChanged

Source
pub struct TreasuryAddressChanged { /* private fields */ }
Expand description

Event emitted when the treasury address is changed.

+

Implementations§

Source§

impl TreasuryAddressChanged

Source

pub fn new(new_treasury_address: Address) -> Self

Creates a new instance of the TreasuryAddressChanged event.

+

Trait Implementations§

Source§

impl CLTyped for TreasuryAddressChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for TreasuryAddressChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for TreasuryAddressChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for TreasuryAddressChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for TreasuryAddressChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for TreasuryAddressChanged

Source§

fn eq(&self, other: &TreasuryAddressChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for TreasuryAddressChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for TreasuryAddressChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +to_bytes() or into_bytes(). The data is not actually serialized, so this call is +relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for TreasuryAddressChanged

Source§

impl StructuralPartialEq for TreasuryAddressChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoEvent for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/index.html b/docs/casper_name_contracts/contracts/index.html index 27299e6..e95f2c0 100644 --- a/docs/casper_name_contracts/contracts/index.html +++ b/docs/casper_name_contracts/contracts/index.html @@ -1 +1 @@ -casper_name_contracts::contracts - Rust
\ No newline at end of file +casper_name_contracts::contracts - Rust
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/marketplace/index.html b/docs/casper_name_contracts/contracts/marketplace/index.html index ca6515a..11927c9 100644 --- a/docs/casper_name_contracts/contracts/marketplace/index.html +++ b/docs/casper_name_contracts/contracts/marketplace/index.html @@ -1 +1 @@ -casper_name_contracts::contracts::marketplace - Rust

Module casper_name_contracts::contracts::marketplace

source ·

Structs§

\ No newline at end of file +casper_name_contracts::contracts::marketplace - Rust
casper_name_contracts::contracts

Module marketplace

Source

Structs§

\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarket.html b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarket.html index 00aedc3..67282bd 100644 --- a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarket.html +++ b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarket.html @@ -1,36 +1,63 @@ -SecondaryMarket in casper_name_contracts::contracts::marketplace - Rust
pub struct SecondaryMarket { /* private fields */ }
Expand description

Secondary market smart contract. It handles the secondary market operations.

-

Implementations§

source§

impl SecondaryMarket

source

pub fn init( +SecondaryMarket in casper_name_contracts::contracts::marketplace - Rust
casper_name_contracts::contracts::marketplace

Struct SecondaryMarket

Source
pub struct SecondaryMarket { /* private fields */ }
Expand description

Secondary market smart contract. It handles the secondary market operations.

+

Implementations§

Source§

impl SecondaryMarket

Source

pub fn init( &mut self, - signer: PublicKey, + signer: PublicKey, treasury: Address, - name_token: Address + name_token: Address, )

Initializes the secondary market with the signer public key, the treasury address and the name token contract address.

-
source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

-
source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

-
source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

-
source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

-
source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

-
source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

-
source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

-

Trait Implementations§

source§

impl HasEntrypoints for SecondaryMarket

source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
source§

impl HasEvents for SecondaryMarket

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl HasIdent for SecondaryMarket

source§

fn ident() -> String

Returns the contract’s ident.
source§

impl Module for SecondaryMarket

source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
source§

impl OdraContract for SecondaryMarket

§

type HostRef = SecondaryMarketHostRef

The host reference type.
§

type ContractRef = SecondaryMarketContractRef

The contract reference type.
§

type InitArgs = SecondaryMarketInitArgs

The init args type.
source§

impl SchemaCustomTypes for SecondaryMarket

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl SchemaEntrypoints for SecondaryMarket

source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
source§

impl SchemaErrors for SecondaryMarket

source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for SecondaryMarket

source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<R> Deployer<R> for R
where +

Source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

+
Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

+
Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

+
Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

+
Source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

+
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

+
Source

pub fn pause(&mut self)

Delegated. See self.controller.pause() for details.

+
Source

pub fn unpause(&mut self)

Delegated. See self.controller.unpause() for details.

+
Source

pub fn is_paused(&self) -> bool

Delegated. See self.controller.is_paused() for details.

+

Trait Implementations§

Source§

impl HasEntrypoints for SecondaryMarket

Source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
Source§

impl HasEvents for SecondaryMarket

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl HasIdent for SecondaryMarket

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl Module for SecondaryMarket

Source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
Source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
Source§

impl OdraContract for SecondaryMarket

Source§

type HostRef = SecondaryMarketHostRef

The host reference type.
Source§

type ContractRef = SecondaryMarketContractRef

The contract reference type.
Source§

type InitArgs = SecondaryMarketInitArgs

The init args type.
Source§

impl SchemaCustomTypes for SecondaryMarket

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl SchemaEntrypoints for SecondaryMarket

Source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
Source§

impl SchemaErrors for SecondaryMarket

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for SecondaryMarket

Source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
Source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<R> Deployer<R> for R
where R: OdraContract,

§

fn deploy( env: &HostEnv, - init_args: <R as OdraContract>::InitArgs + init_args: <R as OdraContract>::InitArgs, ) -> <R as OdraContract>::HostRef

Deploys a contract with given init args. Read more
§

fn try_deploy( env: &HostEnv, - init_args: <R as OdraContract>::InitArgs -) -> Result<<R as OdraContract>::HostRef, OdraError>

Tries to deploy a contract with given init args. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+ init_args: <R as OdraContract>::InitArgs, +) -> Result<<R as OdraContract>::HostRef, OdraError>

RThL^3$AEc8 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�mDCQBGpmd%2mJrjuSXObwG4;(j@!mI%n%xF^| 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 literal 32482 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 diff --git a/docs/sequence-diagrams/puml/offchain-renewal.png b/docs/sequence-diagrams/puml/offchain-renewal.png index d94bdeb9849e07280be228e180fb6a277b725863..567711389eb9600be2dbfe721a79cf7f747b52da 100644 GIT binary patch literal 26928 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 diff --git a/docs/sequence-diagrams/puml/onchain-name-resolution-wrapped.png b/docs/sequence-diagrams/puml/onchain-name-resolution-wrapped.png index 3ead9f910757edc4b70200e2ddebd5fd466ca516..d1cd8fbfe0ce5215120b493b87b55d22de999d4d 100644 GIT binary patch literal 25702 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 literal 29634 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 b@4z+0bF^MHn`mP)>|ng9O)mZ&~q diff --git a/docs/sequence-diagrams/puml/onchain-name-resolution.png b/docs/sequence-diagrams/puml/onchain-name-resolution.png index 7fe12a1ebbfa0918f8cd544cafc260b37a55c7fb..4f474deaa65c2fb1bd415fd4d1d0b16e41340db0 100644 GIT binary patch literal 17386 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 literal 18977 zcmcJ%byU^w_BD!1mu!(xO4tH|beELC76Ac~?(XjHlve3R0cq*(Zlne2?vjwY&o;j2 zoZq?cea9W+egAL>o4ud?iD%6@*Ia9Tf@NO8u+Sf(BOoAPiN6qejeu~=9Q@Npy$xPr zOE<#?|IylsD%t5;S~;8P8`vSh^eyylwC(iu9_ctgGP1L?vgKi9v@+ASu(LNeW6-rU zcNpj)1511{exqdf_jQC@U>&EV9l2hMhe9}Yr;24=%~ncHgy}~2Deg&r#DT()FHG1= z`*(xB$M^HeoVgCB(FI%zeVh?fm%qyS+LuJV^<2GKYQuf0O>5}QN4ZaoQqQa|pBBd? zt%RUUus2~LS=!}PnxzM;P|D*XO~w=L(2LJC-~B-Qva#T{CTmKS%)qqn+Fl9kn728K z7Ee1YxjXv3m=t@al+u2WQPQhhIj~w7E4`b^Ob-k-KXkHB+pYGZ?>fWM4`s=v3hl`E zosZ}*Q15-s z#t)AUuWZ-!=jw^MEg`Y6NId4zEM%qP*X5QT6Qgn5K< z{0bt&aS*kieuN?lO@>JE9G-QSeJO24kxFK@I;7M6c$(Em%I!W7wWNuzPU-aV(-oWN zb%t^&eqS83W~1?H-+8GaFJK2fKa3?)MAjYh|KtWd{At^76@#&^Xi}-yuTd?r2J3%V10TBVC!uCKuV3fcH* z!AOMZ>mPGj$`Mzp7Jd3n7hls; z+q+I_5z>_{r`lul@EQ(eY>bp{ZXRl=N+@h}eXWPlDil~)T3Q;mG&c{|t07sl_fx?? z5rGw|Vx+5&nbH7=|nxt2*H9*SOXES6cm-^f=`PsnBEM%;QNXX;()AHi* zC1cjRqQ3`{9IevNs~Ih~teA$U`ez*{bG2r>cvWSs7{6%?sSF6kpZ@SkQdO=p7Av57 zs6}FLVd24pbJ>Z)XBc?2euNS)xabQFv>&n>EEa3)wmC4+tKvViS$6vJ{oCW4{L)V4 z?)TI7A00{+2z~p)!UzZsMhZ>uwu#w(vR5fPI4pczNR<;@S8Z_a5I?T;8vY%UM)C!l zgNI9<((Sy(M#CtV=rl9}hg{XU!NFP%E0>6gP!6M z$*~@NQyHCz!pbhv;#tyUR8njEN6zAp`=3Mtft$4Gb5 z*e6>ncNq5+`^)t{Ll%0o3xf68k5&dXkHeyIARPO~!}WIu&@ZgieJe<;C|2e2rJi78 z6WMR`P`cpS8Ls{`UmR}}|E|G77$2bU`fGAi6HkzB7vj^+;mo@lr&Fa+Ce`NqkNDgk zlsax4R`~kfd8t@5t5&4JlrkDgo~Z=6F%89}FueL{E)kRe^K5CSczen=$7F2t)5{M5 z`b!-o`5xDo=MwLq_;*cxS+ea59{Q%Jsjf%=sIVutsOvke00?coWIR{z(Y%S;@bK_B zVsJmmABu2o&w0Mbvwnu4dAMR*V?*gb#f)=wT0~<@E~Lnm`Ka5~oPKkw>!Md-={!v1 z*t-hV_=;2f#QAX4d@7v8;$>Y(cq^SRi7?3{=8*{tA&;Hzw?^3$Ro(e7m~e%pvM-Th zw#9KY7h8Qb7etH@54Rc{{Cb09os2bfF<8>&b7U4a$L{REB4F4qF&XRZ1E+wc1R}N> zJMYbBl}d{{dSIVm^YRb(g%8p+bVu{}MCQn4UxyJzoW(P!KK_by+ z>cxzGIOl%q3lM=u&frLTE&8%lp?B&H4I_hERrj8EZ|oig@jL`#27UrGG zmclwPMf0I*QZW_O-$_c(TF2{uj+u;Z&kcS{5@i~gD#JY=^6))pZ!ZY`1&n&ac}mQR zp=Afwg|eCWoPDzmS8{y*(UcNP>M-HYv5Ly?+y%C6SLqg2niLgZ!>A|7c`qS;juzX*N#@IXuo* zz{*{F-N#;b6WLq}g}F`qtJDAw&P zgg~Aut5mZfJ7CUhYgSotPxx??2!({t26ZU&_C(ESID)C>2Dm z%0S8EeF_GP%I{kkWrXuiE-~894KTUvfp(dd)Uc#Dts%FA<#pg}h* z{2!Q~ozFLkTN@t_d%_Z>cuutfRT(`Z64*C6^#WOVURR1vN2lmlIUw?|aGOABBSMrQ zsm$a)3B`OajcWP=g;{#0i*N!9m3)rz-0NHUmiC$Zd{gY_taFSM;gPHY#2*Jz3;?Hw zh8VVSn^heI+}3{_Bm-Xw=GsF;S1_b%kMRc*TRd1IMje)Mcqk)Ik9-= zwHGql#YFQ%`44w`1{;ZaIPWcCD}*=)mcH$EWyPlpzws#ue)V%*SK)Ccw0cwYVZ1W*`{QRDUj^2JASR$0%HtYpB7^Al^?Cp)~E;faa7oO?LG zuf}Sf(YLZsZzZCtZ3#TD&x2(~YHJ*J@W=C;pu`!Yt*!48r^Gd0xMk?Uw`Pe5Y*7jW z*FwK{I^HYG$>pNLrIzuj%8k@(!56qE*@fpAJg145jh=4`T&^Nt-m)y=8;PofNofV< zMI_VgDPrNDyk%*mlEC7v^H0Zmy`^#GlTabjFT~oa9l`6E>5+&H0IO;7eWPH}mv?P{ zg0e4AfyC{yx|K$5H7zg@nb4e>U0TBh7i*ElP()%$2WD@W@ZZ?ULYZ*#_5d ze!jzqY3#oD?CgibxRgf*PqxO*_3@ax40W;mup0RVv%F;EN**Wy`Qt2vNJ>D3?l^8lh-q>CoFm--|gsH&L!uaFoHk3`}xOGi?{itVD- zYnBvoPFUKV++Z|#!k{Vh%2x<$TomE=TlBHoTOIg&0OORj^e~(N{asOj5AeX z7Tp(egwqckzd6{17XHDH(67JvjW%Gs=L2(ky87j1E)rthRQ8~k?b_ppv5=AOcLWLS zrX)l}j10emCZjarB>-KFjUc;Ua-vyS0tnYWWrlxW4jF^~+|ZoKuo{j7k>M}?B^b+_ zlUAbZCdP$%D3U3lP`CvCB_#j8uJbM&GlivhM&KlUt8C?XB`%IIy;1}jmEQIy*MIkG z`&-VH)bgmLmDgDS_@#JCmgb{2OgY{z$xIkuDaMM0r=BggW57QVc$X~poYj`(lkJ*? zpT884;Q`h$5;0D{WcXy+&O4f;7V3WX7e0)={2?yqho6R|7ws!7=c=`Y{ANdT<%eVV zOm(?>DKY9R&{gdpPoJ$OTKZA73@x`%7iz}ZXF@j_7;(Q*6YyJK)kyLP8@*RMYx}Xq zvVoc|YqNkmQPlep>L=FiFRj+duq6gNu0<4m0{!*od?FHZRN>Np%Sg~SP=#K9-GUv17*Z?TIyFx zI1Pr?p=#Msr%ea&LaE^(euH61n!Uo0C`I)1*AL>t5m8X2DNqxQhtj-5c!V1-awF2`2+I)~BwCPT4E!~9!Wwe?a!aTDK{FJG9MneUSF;ovW` z+_zI#!9OM4K=rj-ZWI(!$X8m}+%$<5DmNLsckdqJm|6Cl&##S$O(^M@B7Ed9gG)SQ z9Af+<;)g58eH8eDA7i-kJ%+AiH zx*dvtud!z~+Zf3nd`B%^)f4@glG1+X+t|oRDNs24{QMWEd(yqA$bb$9yl&mOefu^# zKAlpANbtc@r-1v<_fu1!-o1NQ?Uq$ZE+=(Oi^}~T|EWU0Z(b}obUeYQxmv24P1P_38cJ7q)- zPsWn{_)M@MY`j1f1v=a4db(>Z=Eswl6dfHMb8t^L@@t**QHJPSiipSyO5mzI{|lgR{FvX7!ZQ+a+6_D3%_o4Q9$ z5fOxrhUTpYZ8RFD7!^{S$4THd|HkHaqMgdDi|ie~pF%!{u@e@lib7-{HTZ?z!249V*%QYr5lD6_Hqd2B3+5Oo(5bGiJdrji`E z!&-r>13ux!3409}yHllx$}8*ZMoL>}H(@q%Dn>Wo(- zSyI)=4_3bk$!Jrxzntn)6N9y7V=yVwkK`41Z4YOn942yFzUoCa%Yx3VP4M4gWMtgU zAim7Y?oPoYAUN$HvMhe>$F@q7&(a~1e_MwrFwO)mK|T$NUqLsLr}J2ox)u5ck}$zk zs8OFF;OQ~RT(cS)c}Hp1?MTYOXeTcqO9sVPulpdVibRq)(sDSX{dCS#z<%=$udH8Q z1~gtnR0B5Ib(^-SAom5u5ahhns-03I=KfO!OnZewweFtY2kc9X^0TxN3(?g{V1 z1y6_T?YG9uaW_z@xV9sCds|}kUF0$QO|SEy!oCKPn&KZAKM2_*SjBT{dvBP=Q^3Kl^s#X5)mcK_#(EvT;}$vKbxX7P`Q zWA-Aew1+%47boTw8N-F@wSa-zZh|1tvk84vyS5o+8XB57H4#x!_k(r;h!%&UckY|k>B zIYR{P&+Qd}NbEiSA06Yj|tp6dDoCM^Wh^X2Y$gqhkFI)(`kkdTn{)s8&(iv}Y3 zFgWE3)woY29=v+MqSqB6a2;o`SxGCOI~gyyT&j;DRJz``*#0(Cs87!2WE;)Z$%!iu zx&GwnsI>R2Aj~s{lD_vim(bo`q%krawc2I{z2nh#X+C-oepxrgW4S`j#sTCT0NPDv z5=!~^Dm0O7Y|jr@3D8XECK z&J8vUl?vkjK_OtX1A_Fk0nDLdC{O16DU$Jnx1FC1#NOWTngsd}N3j_VY25={bj3Ru zs+J2yOsDt=t$qc2mBhuIICO_zwc>t4S%}JoR#bS-FZQ~JEZF!qJY*P7&%g`(&Ak6< z5&DS@?`34_9RKF>;|plcKR*+_`Ta@o7E2i#u||e>;W!UP8-+d*{?-8ZuNZh}f4}_K zZT$NU8A)s-0t}30w2R>S<0O>Cf|TQ#+nJ0}IdV6?%?u-j>mw4`0id+Dx3{m4Qg2W( z@*i_^SA#t-YBwsV*Ye{3d*Ds^bgNp!!pp)$N1tmgDA1Ce@tis z_5qY}4_}WlnpO)hnm&oonZ@(^k}wx_J0@+8ObD(HY|Fz@AEyB}13<(uM=G;PZFKsB>oB*L%&a&NCqbS{JCL&0=rII5ZE{u=jX}K zTpd<=J^;#H>5ZK$(Z|R;YP~B^1~5PMWg8QbQ>hd!1~3e^wup#`FnR%(Y>s}uqx)lX z4ENr>$zTvs{fV56GHHSzXyrl1(X$a$RpO78!N$jzv|_ymqzS2jhui1ZpG-z`te3kW z2C;my@rkQm=$J$teJv86CsT&xQ+FHbCO( z={d@6yV?gRUQ4;kY60Lu^t*SyzP^cU#?cl(i%}2})2;y3kUevGZ!X_&C!#hLjVy~o z-`3e_>$tnVKA9{3R0)tVpmKKug48bBr&c4xF`7Te@)Rjwz9$6X2vCX~U*P7l)D1%h zhj+wbW_!ry`1eNZ7>zpFnJ(QY<+4i4&R#2OybiepV09pTbI?haEuAWc3_0xQoC6Y| zb)Zbht|s2N3rCQCedxw5ULkY9JUt-QusdA}- zRLoqNF)l{&&U7VIE?w9^_rd(TL!d|!B?)1Ns1 zv-XJ8rq^_bpzh&vcOS*n?JCb3{)gTFE783iRl1mrXxslaC%C{ zZgRgD+5|MAQVIss^4@IybdD^P_}la}!BYh|<1wZ1*yjQc1g78FZ76CYyJ-MA0|P_c zGy$+>K#1m)+HWa{pl;&<#>BwT<yM*R4GSFUL2u8W*pYCU_+l z?Cex<=_8QSvFTOH<~@R<%x)!v&||Tf;WD5O4Y_6CX5(?bLeQLQvsB+1djfXn_I~#} z>L5zJeG)N!1Gj_4c3+gcRdQU9pQ?VH&sQ!*zDwG7xEjefEZk2BcP6u_N-JBa zX&NJtUH9)F4DUsx{l?g8)KCnD5OCKTiZ#aX(9kFr62Ix2o_1~VLo-vM7W@Zvmod%W zyiONJ;(Lkuvecj-u@(1syn{?EN|%Y|;KvVob73aFKY+cZ1VdfAMbhl)?&cOw!khIc z(;@+xmdJY8^FVB87neoZn%Y`UfHgpZV-azL1_ysxo*)*M1BAqV2N#0*>>;N`sCE~S z1T0sTDyaQ{K9&*C(9i(-5e5t)v=M?gPW6A5%g%lCS@;eP6y!vDPmfRYS^j2ir!blS zT?Xg-@}G21-R{lr#16GZ;ROu!Un!kP0^pFTLrci&BV%J@#X>cR3L3>zP#FriDN5bK zIM`L=5&c7UfD-RXp%ze-WkT_1nP33x&3(E3Jvq9QZLHMX=wUsg4V-oOO9SE#os11yFGO zvz#G#vG4jf`ol>F(86@7;a%2%fPevjy&(St?su+iW(Od&xa7N=eSq`Yf*|d02~LlW zcwJAndp%#aDpMRGkH^^(O{icz<#Eu?a5ocH8^+?^pX137*KLz5GC{ zUhA*|hus$BaxafxmyO$TqYJ3^%d4yD3Uk-hzIbZslscCmw2vMke5rKY(`ch-@%Hw< zxjd3~2?)PD>}4GC2OF}%>EO25{RJF|D>wn!OflboUPO!4c z#l>~JJ#{qS>tl;e3^-!tm^qM6A*Z0F_uqO$stn(gAbvZWQ}(m6n4ouJcXaDJdyt zy0JgDCQ5hq`q&w`vCelY=dvW@TR3L?cPI6?TM`-Aixw1LRi+7rrTr^9rz9+`Z!ywY(+3HrYB(pdva)el+PD1^ z=(gk6)vBz#<>$A8s%&bIuGNw zsz;aQvR*{YYYM*LWj# zdGYfnDUTiMnAOXdFVPj_%YlL3$3D=w@E7dUy{gQ?P2=FEmCM4!W~QC3vd%0mWgUUo zexNswe3ai(%;Uoq{Pr!_#b27j7sRGY^hroareK5%ArJhLgCDY+02APg$@TShrdXKp zD#&?YUch_3>C7Cp*Vp>PJZCH^B_iC{1$ zgy4{nmeD4VMK8J8QV6djU0tK*0*PyeNTPiQ$0#s1mS7qhBhrTO2OjM6p)&{{)v9ei zNks+`qW#fZ;r4zzG*X0k|NM%$6cra22XX*#8+2Z`YBYe%X~e0GaNTiO7NDJSCr`@? zE-o%S|DKWpAo1cQD#Zn}PdHQ6LU3YYBKTHuG$B2rj$sHk2Vd0r1u(Wo+r4;Nm`+dg z5ruNXwe9_ecz^x_m%s=6jc>m_v42C<|Am3}+jRSPzf7G+=VEuRqB637sA55cLraq6 z9H{Ho)>hZ!^=psF`aa=dovm0tKFV^O_IdQzqWba=*;dFzkb^&I#W z7bGzr%l+{7t%QvYiy>ff0H{ZU$9-=EsV2FWRp)iZO{WC20DRY{NM4yeZxrx>ryoR8 zFp%p87smq;QQU+${rzQKdZm-Eh1JdV)$aG&*e9|r-QC?26S0j&QZ+_5R{V?Oz~`Y= zEDZgOo`*v~K!AhObnX9hXlUpGtHCkwRg8u+0J#xym}%K-b=rmYN+)s@0Eq)MBGBD{ zH1$vHM(|U0J3<$*A5@qTF*KYf3I9enGd7a*;}K~H2OtN0{J0#d^7P7O>I#xi>$1y+?%f4GfZ{oaQ|sH>I}@58ga%UDm8;K!kaJJ(^j^esn9=rG%O2h zHf`?bUECzX{u!&Dl5^dl0}YodNEK&~YyehLZYSqdX*qWt#yOiKpNHQ;pytljwG-{U z(t|fTSMSPMdSw3*B!0#YP}*-Ulb8 zBo*!ZzVD_5FI@!bV>SaX+f zf;9W*tJd=u6)_eGds+=%4+2X|kAUsS#d{Mo89oP;*6mtB*vZ~pgvs*&%x2 zysa_jt^MEmgt~OuNN#~VON{9lRF1$N0p%YCoc8CN0oq!-UjB#z=7QE40#e(vrI^XN>hAR}fJl6N zd_ylPExvO>$=as_5^J4(B0If!d>94TTH4#&2M}3;oH+(KD}U_|@HTXGbe*uO+S*dj zjNzH<1-G^WZMymO^`Ln@Jh2GUo#kaaaEa{RiH+vUW8CxY0nG{v9gs`am9+-|_+S?x zww8#v?^_b3FxVfpjH3zr-Lm)d?h<+dU`n(Ylg8J{ch_!2WaIp3?RF;RiwdfMFm|hV zJ_Wri5BQv{0Q&eTkb^HhFXYVXF#J2(biJ0pv)F`aKVFEaz>uaMSWy!6- z#HB<+ejNT=9sYmTQ2vVo$U&{wk9{rnCzF?1%0;V5@sUtJtzkqCGs-Td4*jVQUF35jL?436U%Wdrp&lwqwd z{1`ZlQi&X#7Be{bUHIL)3&H0&L52X|2w9wj+$Ln^6SP3J5_Dkf1Cc(t0Pp|= z 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 diff --git a/docs/sequence-diagrams/puml/onchain-purchase.png b/docs/sequence-diagrams/puml/onchain-purchase.png index c58a60180d0b3ee20be832ad3921d0516b9efa8a..a99537a17f85f63ab5faf606452226d87dd71454 100644 GIT binary patch literal 41548 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 literal 46924 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%0D0vSMbDW;8>9hIGe9ogo>@5L&Sv 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 ne_wkAzc9xKm5C;e6tc3VuMI4-y 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 diff --git a/docs/sequence-diagrams/puml/resolve-name.png b/docs/sequence-diagrams/puml/resolve-name.png index c74eed80522656d223fd2db991d7908b5596f12e..9b1fe84da253dca407048ffb5d8e536d72baffe4 100644 GIT binary patch literal 30303 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

HOTpSZ*4fyg~EqwSR>jZ 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 diff --git a/docs/sequence-diagrams/puml/set-account-address-record.png b/docs/sequence-diagrams/puml/set-account-address-record.png index 81bbc06a78ae2c37a6d3aabb1254797c2525b2c6..babf5c62bc86b7ca410c213731d117689e60a1b9 100644 GIT binary patch literal 22762 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 Z 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

^toMg+<0ez*& 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

RThL^3$AEc8 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�mDCQBGpmd%2mJrjuSXObwG4;(j@!mI%n%xF^| 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 diff --git a/docs/sequence-diagrams/puml/offchain-purchase.puml b/docs/sequence-diagrams/puml/offchain-purchase.puml index 248a312..f79e83f 100644 --- a/docs/sequence-diagrams/puml/offchain-purchase.puml +++ b/docs/sequence-diagrams/puml/offchain-purchase.puml @@ -6,20 +6,33 @@ actor User participant "d3.app" as d3 #lightblue participant "Registrar" participant "Registry" -participant "Resolver" boundary "Events" == Buy a *cspr name with fiat currency == User -> d3: Buy *cspr name activate d3 -d3 -> d3: Process fiat payment +d3 -> d3: process fiat payment d3 -> User deactivate d3 -d3 -> Registrar: register(PaymentVoucher, sig) +d3 -> Registrar: register(TokenizationVoucher) activate Registrar -Registrar -> Registrar: verify voucher +Registrar -> Registrar: verify voucher\nexpiration +Registrar -> Registry: get_token_metadata(name_hash) +Registry -> Registrar +alt Token exists + Registrar -> Registrar: Check expiration date + alt expiration+grace_period < blocktime + Registrar -> Registry: burn(name_hash) + Registry -> Registry: Clear resolver + Registry -> "Events": MetadataUpdated event + Registry -> Registry: burn token + Registry -> "Events": Burn event + else expiration+grace_period > blocktime + Registrar ->x d3: Revert with\nnot expired token error + end +end Registrar -> Registry: mint(buyer, metadata) activate Registry Registry -> Registry: mint token @@ -30,4 +43,5 @@ Registrar -> d3 deactivate Registrar deactivate d3 +== == @enduml diff --git a/docs/sequence-diagrams/puml/offchain-renewal.png b/docs/sequence-diagrams/puml/offchain-renewal.png index 58947d41ec825b234a06b525b37b517a9b6004fc..5797dcd15d813ad13ed4539ff9e11d988ee5e835 100644 GIT binary patch literal 56826 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 Ulag8+;a!Bv-`B3>DVRR`FPq>!Lx-QWhKyOlb# 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 d3: Renew *cspr name activate d3 -d3 -> d3: Process fiat payment +d3 -> d3: process fiat payment d3 -> Owner deactivate d3 -d3 -> Registrar: renew(RenewalVoucher, sig) +d3 -> Registrar: renew(RenewalVoucher) activate Registrar -Registrar -> Registrar: verify voucher +Registrar -> Registrar: verify voucher\nexpiration +Registrar -> Registry: get_token_metadata(name_hash) +Registry -> Registrar +Registrar -> Registrar: check expiration date +alt expiration+grace_period < blocktime + Registrar -> Registry: burn(name_hash) + Registry -> Registry: Clear resolver + Registry -> "Events": MetadataUpdated event + Registry -> Registry: burn token + Registry -> "Events": Burn event + Registrar ->x d3: Revert with\ngrace_period_expired\nerror +end Registrar -> Registry: set_token_metadata(new_metadata) activate Registry Registry -> Registry: update metadata diff --git a/docs/sequence-diagrams/puml/onchain-multiple-purchase.puml b/docs/sequence-diagrams/puml/onchain-multiple-purchase.puml index 9e4c1cd..db65faf 100644 --- a/docs/sequence-diagrams/puml/onchain-multiple-purchase.puml +++ b/docs/sequence-diagrams/puml/onchain-multiple-purchase.puml @@ -7,7 +7,6 @@ participant "d3.app" as d3 #lightblue participant "Controller" participant "Registrar" participant "Registry" -participant "Resolver" boundary "Events" == Buy multiple *cspr names with CSPR token == @@ -19,13 +18,28 @@ deactivate d3 User -> Controller: buy(PaymentVoucher, sig) activate Controller -Controller -> Controller: verify voucher -Controller -> Controller: Process CSPR payment +Controller -> Controller: verify voucher\nexpiration +Controller -> Controller: verify voucher\nsignature +Controller -> Controller: process CSPR payment Controller -> "Events": Payment event -Controller -> Registrar: register(PaymentVoucher, sig) +Controller -> Registrar: register(TokenizationVoucher) activate Registrar -Registrar -> Registrar: verify voucher +Registrar -> Registrar: verify voucher\nexpiration loop N times + Registrar -> Registry: get_token_metadata(name_hash) + Registry -> Registrar + alt Token exists + Registrar -> Registrar: Check expiration date + alt expiration+grace_period < blocktime + Registrar -> Registry: burn(name_hash) + Registry -> Registry: Clear resolver + Registry -> "Events": MetadataUpdated event + Registry -> Registry: burn token + Registry -> "Events": Burn event + else expiration+grace_period > blocktime + Registrar ->x d3: Revert with\nnot expired token error + end + end Registrar -> Registry: mint(buyer, metadata) activate Registry Registry -> Registry: mint token diff --git a/docs/sequence-diagrams/puml/onchain-purchase.png b/docs/sequence-diagrams/puml/onchain-purchase.png index a99537a17f85f63ab5faf606452226d87dd71454..45ed3c18e5a67048d9a9ae2f431e3c4de7952f86 100644 GIT binary patch literal 82120 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 H{TTmm9S)K6 literal 41548 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 diff --git a/docs/sequence-diagrams/puml/onchain-purchase.puml b/docs/sequence-diagrams/puml/onchain-purchase.puml index fff875b..f225381 100644 --- a/docs/sequence-diagrams/puml/onchain-purchase.puml +++ b/docs/sequence-diagrams/puml/onchain-purchase.puml @@ -7,7 +7,6 @@ participant "d3.app" as d3 #lightblue participant "Controller" participant "Registrar" participant "Registry" -participant "Resolver" boundary "Events" == Buy a *cspr name with CSPR token == @@ -19,12 +18,27 @@ deactivate d3 User -> Controller: buy(PaymentVoucher, sig) activate Controller -Controller -> Controller: verify voucher -Controller -> Controller: Process CSPR payment +Controller -> Controller: verify voucher\nexpiration +Controller -> Controller: verify voucher\nsignature +Controller -> Controller: process CSPR payment Controller -> "Events": Payment event -Controller -> Registrar: register(PaymentVoucher, sig) +Controller -> Registrar: register(TokenizationVoucher) activate Registrar -Registrar -> Registrar: verify voucher +Registrar -> Registrar: verify voucher\nexpiration +Registrar -> Registry: get_token_metadata(name_hash) +Registry -> Registrar +alt Token exists + Registrar -> Registrar: Check expiration date + alt expiration+grace_period < blocktime + Registrar -> Registry: burn(name_hash) + Registry -> Registry: Clear resolver + Registry -> "Events": MetadataUpdated event + Registry -> Registry: burn token + Registry -> "Events": Burn event + else expiration+grace_period > blocktime + Registrar ->x d3: Revert with\nnot expired token error + end +end Registrar -> Registry: mint(buyer, metadata) activate Registry Registry -> Registry: mint token diff --git a/docs/sequence-diagrams/puml/onchain-renewal.png b/docs/sequence-diagrams/puml/onchain-renewal.png index 6775f040035d0d4a2129f181059e82c14bf63c6e..3f6960b6a917a401c553787c6cbb2a57a6acba7e 100644 GIT binary patch literal 78244 zcmd43bySsK_brYJ2B4r)q6mtlq;!{nbSX%KNE}kSLlC5-yBkrEI)tRsNJw`GC`d~; z+;#Ai@B6)XjQhL){1`*U6VG|}-fOQl*PL@7KY3a4%b3KNXlQ7cB_2IgL_<3_gocLB ze(@|kBA)802LI67h(5K^vv}cXs&8O}Ca!O;Z>4La|D5cZBbkwn%?oR8M#dMWy5=^v zW~K~!7G`#xUr5o=&K4jZKehSuakMjV9fyQv#=DjJzsVWpQM$R4Z8h+fKh zEQv1Zfv;$zr=4(hJCG+B{lwKU;dLS*ZTyF@{^zp^){`nVUFRbU5p_Y7P0zVG`8%)S z9cSTx*?ihdDs?x*pn+LA=7HU-fk(Q%%rri!p_t}|b%`w5^&&}J5Bk#Vu!?ifzrABz z|N2$)brxB=yz~l1B8u==kIjyB1(^rMrjib-nwon2FFv_aG7<5ro2`kPgeWBC2AK=C zZI+;pB-4z++3~4yv_O|TXKu{qkPBwlKb_)at>qy-SB~71O~MJ2>kbiNCJgiSdH&5&ei0;I>%@w-D}qO4tWygjh~Pwdz028Lx+$8hm4Yi zHcmGp?DNIT1Fo&&*Zabo!XolxhfT(Zv9(i>mt=#8D6_0~S})5!N^j?)CEq{zI zT=-=!X%#>rx>A>hGzbinY4O#K8y#t%ofsOUD2oWBY`S?S~^QO z`{^$pQ+IsNp?-@%L$^fz>v7G4>_!Vv zqi8>9e8}9U>b&*a28^0kTnLFJW-^sdpP`m!Mqd*Rs3CCY4zKNcM9i3YIzmBR|2w|o z58J!3#}d4oq_R(6D`%7d9!Rl>G!MB^LXHmmL^yp`I3$PY_Cwkdjg_(9wO^kZ|Ul=TB|5Y=U{R z)A#D%KPF>{;jl_1)`gs+^w^i$vb^#)s3oIeI_^zzRI|G)kak1_l~?Ig#2*45dL zv8~10WOjO&g}yngy!M0}g^t!s)y_Ma>6c-CQJ?$$!_UuQcXxA?<|w6OhzYiTOjN&S zVOjMjG)~>_>bikI5N4_qWB(psi{@3YA6^%N>+0t^5-WeM|4k z+f*2Qo26rQ>&d_ssbviMJ$kEb?E;s5Rz_Zzq?J|gfar#X>sW*gVVzHN|GEHHRJQC9 zv;E55j*z^Wq8C#=o0~TC8I2eI7@lmf&fX?s;?*T32={L3A#Miba;|D|#s&fD@2wTW z!{_u|J^T?!J+BWB}TFxV1(6Se!m?XV7fhpP3_{6_bz?yGKcB-VwLTmh4Pfn~`PE8NU;`xq>G0VDFiT zg3!yl`q~WcZn~tNa?>%QgQJ~Esjs-$BEhV@dSb6;)0KxPsODbYt{hNczObfQY1i1; zC_xOViQQ*rUrsS=TUG>v zs;a%=*CcvA5hiTDo)^;XIHD&55$WP`kwF$R60)*dMbG_^Pu@Vn8^O%%c%^u=fr`x6 zL^UKfQ2G*TDr&mqdoNALeyx38(KU~|ncl4Fy0cQ9<{s=|v+1e$i*H(0RaIA4w@3LZ zDk~~eKf!H~u@EwN@PGpEra$H`ZiA4({&;_CDvSSmG+VxQb~0kBMcfs_`}5}&c^y6nYNnm1OoR*j3)h9zFqO^zgO z!sD$$?VJ16FT_sBv>Iyr$oDD*~ zreXwHjmh9kgO0fP`1oR_f})~#D)}#GnP%wBMs}SXt5ZMzzJY{i&PQ9y1jg*_`lBTq z>g6voXNkt6OU)+DyVD{KDz6gY;r~KlO=oV>$T!$rthgUlxxfCStr)J$VR8KOTys(J zs-gaPy0^0VxYLWxpE*B&VoXgfC_U@tanFcSZ{bS)Xbc{hiMVdv4d z;Ck+5^<|Pp$$;hQfM}*+cVac^d&_0NGPqhj7%dqz-IB!jn)UU3c_1;H+fac*+;W{_1owAF zSkqpD2B~?al%JLtZ5{`@H*9|Py0EskwxK0PFIG+ z`$LVZm(%9O!`XP5P3KH2eP`mP5%J(89YaI$nVamUW5sg^buF|+^L-X9){XmNPP9#Hky0fPF$HGfR>8lM{ZAI5t?_2X!s@B zJ<;Af-0(ww{8e~nyQ_F>yb`BoL$=K7$CqyGnI@UmzPu~xX;Da%Ih9o5#&=IhjI5?O z*~BGLK{R8DEZDZ4;}I%mM15kH^0y=ynyQsJm}lmzs7S` zU+c{>T5tVIBTbnmtJ#gt_|}49R=HJFa$mr4n7gB+p9TBpnESVK(MhCZ_D!>z!$G~= z>f!hac73z=oXV?QoaL(bEf%gle1Phz8cp9{sB>%k1l)bn>;i1I0CM7i7OCYV$14fD|Xh__BOfv78BEKCeMaiiuBvK zIXQcR-L?mK+(%rzb`Mr@QnZsuh(iM*QiOB7_wc8JrzU zG9m=;c-bPHU7WX<^biP%>b9sn=Z%gzxtDiDJXNF1d5yduG?Y!ci9abb?w^&`T>Or;+;wX=M$IwzY;6{@nS@vudNqA(t$h-LSMe z89APjJdc+(m=}<_rPq9%;n)<6qpuluf|D6qT3RY_a#$JEYkYp~I#p*cWwIN$X9)*l zdf?rYco(Wc4OD?sFVufmEWEdlKQ_)c-<>O;dN-2PWN>@;w!m?A`Qx5mi)b3XL<`JR z)9xbu#f`cA0Q=^Ak+t>3{N}eFH2HX(Vf2tJX3#D7crmtD1%&m#9y9)IkG&6RkxC|x zVM62SKc>TXwX_!}_hq=jMf$iw-+XD_Eyunv$tT*5jjfKbP2<8%WhF?re%w8ABUO0n ze*B>+kSjN_$1Z*Lq;XN!)sv2nevtGaeDZW!ZgQAslE*TWpG?HWB=+&R?z>lSvS{uK z$)*ZiU>FEf7iQ8rM9%Rq@iJK67q3@YRV64Bvd>@X(P%uj!WVc@vX(7p0b=!aJ-*PPSCE2JgfMTJr0q zw;Iv9yW6}x`5h0IgOGbm!y6@UBItfkhAJOM9LLVPC+}s&nn*^xBO~#vZ{zM@qBa-? zqwi$3GY17l<1Q%~#&8coL-vOeX@MC}azdCDp#*wY&*mOzeh|SD9X2Lw2BHVFXU@IG zPP*NSHSH>pF<~pdfi<1R(3+-=EAWCWmU5~8eXs!`{Y~~mo$Yl)KUhVRf!xM{tt-3^4xj=uSvV>t5hh~mYY zlj-6qnVA#^JYNsF54T5GjY{)t)Z+H0M`+hB;K=`#1RnIOWXKoUTRY!=J&?PnHAVp` z;BuZ!JUap7{SW!rpqAa&?My66)oMZ^bNQMiqF#0^EdHL0auQX#I2$Q5aMi9| z3mP4YFdHhcR2zANn&4`k^z{_ajA&!FzOOt}Cep87Cq0mn@1lCIV!{7{Y{d=A*vR+LKR^?Opm+0$ew{bz0j;Pz4O1sDVZQ7oLvP;0HdV!0>REISX2H z-#J49Fl*yn<$^Q%h<6Va7&)wa7-Ca&Cdql1z?3%PrEIifd9McdW( zYZBkm>|2F&{(~hJwY~4*a{D{0a%hooUYNe^=Wfi8;SGUDm*GGHzFY-lJ}dq+ojn5>E2B`nYK z)E_q+cFGGI-FFxXrFk(ZZ;*f?|UygamPlKEQIP_K-J zfPHwSN#x7w3-ESmY41Yg?4uF!Kq8^#;o)HjW7EF3S51~Cj`qsP-H-R?kjJ}gGm??C z^y;O71EXaY+Nr`A6<9{^cP5;V&8cPD*!Om4g6A93($hsmL}=C+H7g=YdMN=e^uJfh z#!Ctb`9v&azAH2)81P;A1xe*Sscx_G9EKKYG3Ba8cH_R?mGQ}Vu8p>r=UzX~Q7kd& zP>W`q?73y|9Rr5#biuNtF-7jowsOUQu5l zDXT_tBH#?%h7$VU!!FhN><<7izhdf zuL36*>CaPKo(5c+>UFTcm`}01`NeBw-n%98zRFPS>PSi3z(ABTwfkg+t;x@>R2#X% z&o-rXPFh+?!yAmEZf0Tfol2H`SVn{NeQnpRC&NYh(Bs&)$4(o)>$x}$#73Wby4V{GECRgM zY~c;KMLI*Ao9xm(6PZ$kQc`Wr!KA(1<0QZk-sZA;E+~jry_>Q&>3&iTYZ5Y$-o2m~Uc4yLQs+--Z{Z#JFFr#)WI#bOf1`olQl; za9QshGSLjU>2dvtdDUoO(sDfh>vPlSeYLBd`s?aEpRxXs-fq0ZJu5ANo9%MH%90_4 z`RHILd-Hy0y-$c7?g`LSdAYf~yu4RPxFh1@D}lZlDKQxx8PO_#@$&M}$Bn(@Zye?4Gk5@WrvaQ*mcEpb;;{`BqwVx4&)7U^NikLF(`<)2_tnsWImwndZ7Qs=4Y3X z_4Sav7H@6$1Lq=x_Q<_!2hAm|x+e$HVl_3#PV;Lsb8PNaafe}{mQ=hhrT?J#sC^fA zpTw+d%O+M7JZr?9zad(V#7gKGy`|-^O~OFQ-mN(<vQF5h&CSil%s%1nxQ0c=#lg3@?z*r^Gw;`)9MlF7GWOK=TnQ<=aKcZ_w7#Jj z-Dv1qxi;AFaK6>|@L)AvA-yTij`xebY8eA%sPk9BLYCjOqubsOl}_zIMo}!j(B?Ps z9!%sSPT$*ebLpny6^*<#H+9jg$gZT!CySqOIDbyN#6m9F@xZJpt0O)$J9Vl%{X`vU zB;nwYVHI_QrH*~^1?s|6Ksmk)Vz-z`Qx(WGSFLiOIk<*}R(*rXmz38*egr)w@fns_ zA=Qt1a8k0DQE?{CuT#Ceb zR+M+)+Bwf0t^NEaM)WZLaqvHRMZkl=vI)Xt2n$E(tYu7U5+|a0hU=uay zJ8SZ`gg?W|`bi~Qo7#c)sZS=EUvvNag=PQabbM*Q(*@8doy0qbnkAZjzhbf#04!(F zq!r@XVREqE{}fRB9MSUE#ES}85;V-0*)pKT+;y@e_a#*Bc1L>Bg#NW&{%+GC0AyVj z(g2FN8#C)+=@y7^R;i~~C-*%U!;Wsrhj%1?Kjzx-fY%wXa?|{P3#ggIJ8HPva7Oy3 zXZh`a+}ka*z;i;kJ|RKbi=jog^iY&j$E~HmJ0JG3$D#dviQCaWutosNWky2dNAtC7 zp{gbexND81iW(a)$O#9wYtcp#dSt)HnR8EHFixcPtbIEJV|WZ>h;TY2 z0|tk8;oak$YkBT_Kcd5!t%}`_oH#hj0Gs3kM-M-+r=x=8Gf3Tbb$hd9mX?j(-A^#_ zX_v+;qiyG7^u4^i5Kkj%pYZShB#$$L6vATI85kHiR;YKOr1xH5x!GuGK|#T*SFgqh zdwXL1u2c0WBWsMh@1|CNN(;M{!OnfVN}^|t;TdZ1k^f$SJ)wl7S^-gYHBvq&)ht*p0fr9jw+`^uNPz%m;1LpktcaULMV{gi11AX`ip0M@*s!xO`}KX}5N7_T~sy<}Cq%TI;z^ zze*4Sx~m*FJUl!Ic@9ZC{Y-caN-zD;TgcS=Iaw<(-mh6*-oyK%&Mjh5*4Z&s|b932x$c}^(g8;;y;tJR;#gr$? zIREUrqn1t5?Nnwy{%YGLKr+QK1SI3M4#cQG{{5P@rkjO@g{B#}4HlC%GKP{km*Z7O z6Pp}k8aVYsR?~+o?JbDEY9T_B-S+*=-FC+9>mEA^d>Og&bc10U1PqZsw^7U)4@4J1 z!_Lxh@$=SeJUl!A-?ZJ2B1c#rJOCcv9D%rT?b`I}s+^v%h)82RR4{qF9F30;@|4i0 zOi{hvVuX|tA01sF$)z8&_f)G6 zu8uHa2*OQce=U6ZA$)`MjW|xryLq`<)!fm}+4ELKbpXP2-Y5`9!xg|45;JjjWI*y_)g zBPC`s8(~ExSL~p4>NGKqXnJ)q^83oU)NZTco}4^=I0A?Ahsq2l&sATqU(OrMQ4$}+ zCn2H7Cg`=BKHH&3uo{pSKOBJMfL=z8l=FqohwTFy>F5Lbi@8Wy$8Kp7@8MaD+g!2C zdgn`=otz{`Vu9H#hOKU33<#SScIrw1qAh}^euPH5=<|rbq_9hfR5SydQtfywjT9!x}YlAIBc(+zU2va^l7s-c0kflf0m$5&U4zgCdwbxpa;b zErOwk2vlXAv&f?`gF7CcrZY`%I{GYb7u!vZvuzM+XlOLV7km=;6Kc7fAX8ztEV&9oB;X7!#L-TL!W>8~Re zhB*9vg9RukytlL}Y$SRzB}VOazxJM{CuHm5gK&LwcC!~Rex->9Kn9`0?p1z#ZQAR({n>*}`qan9 z+tW|Z#J|yc9pk4(Zn?s$Da)?neB;G!8N1ky6d|wutwr(t{Ra;oG$_p1@A8o-E@e+XJzajh`PxcPxrLIqk_6#RZUHC z0Klg#SIJd!u}5N^u`I8}?0$AlL70V8$+7p+`zqmPghER*P(>Uwjmll91dB!@w$j#I z>$qW{R#sA?@71UohfL(0i?Q`HN;r_o{d6GD;)`V=YQkexSZw&U$lhgsCCtXJaOWH1 zIV?QeiJXYKf`l(l7@sGgYXi-CpUW&twLLAa%%g{U8wlEw)#IZB>yP$v3{>&&tFbwQ zDJuniSFE`K9*Rk1^&BY7-YWQR`Mo}q1}#g7xPDDnCIqLEK)PE_BO1q~=<8^IzP7;q z`vGaUD?e30SV3H;yoj>+c75)ACuL4f&eB{!S(*KZ{rVS6sK#~}?M#4Bo_bjpzP~FQS0u`E~nt>P}7_%^>Aj);u*%o>*;zZ=*hAB>EU5*xz=oHNknal1Ox<7EvKMh zr>CdS$Ix7cW;bf(?w2okPZ6uEKCWRUpU9F9tP~`C{BRT<&;@{e8M#_1!frZ5)-HBI z0Co?HZB(Xj`^R1zUR5*wPmZjR#XHn~Zh8E=Dy>UfO{(8{M(VaWKS9HqZig_ZuP6oXT5*_J|iGphQ>(oqTP!ZOwKQ@sKzap#*GGqt6#o+ znX5B|1P)&5@v|_m4DkYqa7t4~yf4FSy&u!OzP7feIyWsfvOOAEVI`4MR!41|I({Ze z#>Wjx_-m&jgeqnin4SOx%uFgJ(<1XH%$7?YkZ!-_WO{dPF4?{4tBMpn z+wCRQwI`i}5L?!>fkrLv7J@xGb_j>Uu7em1(b~y-ii(P?wU-nKBT{M3LR%zilv=qq z1TY8ZHr=*B@;$CcP7jZFXK)nU&urH8?&_y3cP|YUrh9ugf}P;xrrIN?TLnSEbCx;8o5N*=m6}$fF+KQ1{3%{;GICiNbv|tY*Kpx$m^wC zy2+w{5ryBNk7?Vka0sC~-59ri!_vjnKM^v(?YWM4Dzmd)vV|B*o7cr*BFrvMJ5m1` zE$EgZSf_7Iz*u898<9psQ+oK-9DS{h_J4SVB^v6@-in)~c{-ARwKy?p$qvH8bv9`9 z+;&UUW}ZEMN%K8a0!Au-zU=?lwVZmv&_@0;RsEMs?jIe)fA?vBwF&>xOo4mrqx}C< zC-ndErp>?f^z=YKoSBC*0g;`9%OosLlarG-zY`S~*M>qeqUj(We0#h=*9-aNMp|0h z^vq0Vo-ybW;0ee;KB)(4gZ%E@383Y`#{&erI8Z&&jM`b-Ah2**&mt`*`KhUmTEi$z z3w{lC0Ct7c@95|_Ek>Li7e||#R>u3H#J@Q_Sp-e`O*Td4AEbzsFu09Hd7U+n!;bF(I za?75pnGH~EGGx5P^Ue4Ve~CMJh?F)<(5t4(iiBF0BYox9USO$BXi zkU&Z1*(?oN0>fA5<8}TrF`IG3i|~&yYXH!=?N<^aA{x{_XjKyv5&eWI($kw+Sdg3# zA*NB?-`$0DJNQ;%25O!u5OIP=Mn6BjJO?m%X?nWIY0Eg3@7}!(NbPoZc1zrs&)7mY z?Aji~9269E`}S?%vh}8R;#>~ ze<|w-)sM*Nto)>G)@Iw*t>$od5Fb%LV4)0TDlpHNc)7$pW>a0R$E`d$Tjm!8zTnt$q*g z-(=GNf+zVN39cb*|4uG0E?QgTG9(f-CDN1lM{i0O2J%Mhys>DCdt|a(zwRqM8CbOD_xUXydCuuWGMC zHw`SoQKJ1s>QJ6yZNBu?;jdp;fw2Gl`7>ZRLc4~|#lhg^X~1s=#z1k}6hn|N72!^q zSvY;}%2j2F+k=4Pu$XwRxp(`W$BJ~^FJM_iku1l@$9)iSDy8B+`YX^%cemY^oZ2K7 zF{*M{yE{IIYy}8*5-)1_zuC2m(==rYogbdOC-5%)%6|}84YEJ(*Dqhv$l6wFpc3|f z(2RHGmJfWk4-kvmIGM}Z2c=Q@W&wYg>wt|RZfI!8$jCUQhUJsCaDmk2(*P83shh{Z ze&!}Vd+U(lQQ_j^G8FLI*Y~2jy1L~mbQeE4?>~M^hMh&$_F<8T)kwZ0j%{_aR&H_9 z?SOtc;4VLp8s?gfeRseaH91*X0y$8TC@U^dd*`bb`xv~3wzyGa1Zz3Ex}Lt~_~Awm zUT5k%ty|}-&xascY*b!*dk??6lRghW8+@bAopfT^eosKquip0Utl&N zY5q;S5i$8%UsQQ;2ohAp1ISjckx^u_)Gh4hV=;9VUS8+Ct4?H6$HDGNb7f_yP^3pT zbg;j_U;2oE(K$eK%gWysV%FPR^wA^V3{BxNHuqzfJL3$hMX!Qlg^jD7wi<*qhycKZ zzy*r8U>b|aI)kFvEuHVMvq!zrrS|OAL|V=?t&CUp9*HpC1Oi`7y}Mc{pYJgS#+nPx zlLE-dBbCpCuMsk8xd7kQ(a`~Y@#BT&&cQ(r28I<#oOMLT*x1;-j_VoK)vnPDn#ZF= zsPcfMo+6W-aNW@)z@_oUBD}w|I;nke8d&t~f=4u^(y3&0P;1WK2s`Ma)e@CrtH$COUPx8Nf(ht;2`?>e2eWHAOp9KZ2Xv+ zsb9&Ah`^Kl&guwCKu41kg^-4Wmv&F21#YeFA^}^e#iUjb!{-%6yO8N-Su)n1sqRN3 z(a%x$i1sMrDJ~8+_94`OXL@?tjz1y+C&=po9#$_iPfSQSY$Vi{kGbx-+nX&1HZ~!8 zkR03)1oTO~j?*hES}?zmm&VI2y{rzQ#}f&Swt8-0Kq)F0C$o!2E!s~h6PEz&%!rq# zCv{{Iqad9rE{Xsk(S@*l_AITetPHgNO7zT6WSt+3z?3!)mj@dE=jQOuug{=!T++0T zTA{#NgFQl6#)lB1b$apYi9z!!Fg5woFaXgV{E`S7B_AzXP%?eqFf#d0*0_$g zw&nNi;bmus9rq|?Ax`El1F8<6g;%JZy2L$#Wt6QS@=4=OVb9=K^Wt^6GTy_4nAUy zH`4k1Q~xU%wqDu)u+0|#9CQBPxBv+AwdwsVB0G}emkd0!8lGpJKwvZmATZaN2&$?f zBH6C-2~%d!f7BtGi_pLR(XzQ(p%4GX+5^x$_e^!HzrUn{_~f!xBSGN5Zv@z6&NeNy zXLt?slQ7Da$y)7^Y#}v8O3Bh>vNOFN{}LT^fSLfZG2_uP$jgh12O}o=C1#^`jsEyc zJWqBN;wQ0SMdU~B_e6ZOy(%7b>nhGSaWgkYc!?ka{K@AF4Zq$d zBqW3=TvPvc?eJ~KDh519y$sf`T?z^cHbl?E4f+?C-1=sBP%9l__Xp&~mfWe$Z4Dkd z)Kc;^#3aJ|w|L>Egx!KJV7%chb18{NNB*BGNNU5cboSc8h;OlH&wKwhFrb+wvHx%0 z0P>4Q>0qOm^#61at*XIBaZ%C6=4L7NfL3q=ceDdgaHd2A2L|4H&kmd+`1&RC zL)pwmP{chF4kpy;w?#=f!85TTA!LZY-~w`y8MtIV4b6lhrU&{zCv0u{C@TgMW+176 z)`*%kxDSEP8GNtu^*17B)q%7UcBbjx_Zc`q0QO1$6CW4gok=EI!>LYgYNB7926_K0 z9@?e9g{4eNU&2I#PJ$PnyHv?8!uLV1PtzFspvhyIKkE=Ae7Q3^BpAfT=jP@NZb~lD zd;)86a+#jk4VQ7>?;>h?OeDW=OP{&!_178+1qr!;sKC$951Eh6xR2BQnAZgR;>C+t zSbB@ld~9!Q6axc3R?du}ucD$7bp_E5S+zOv#>~&3Kc}V&?N_zfk3p~p&_SnOY6_l- zQuFaI#83u@?#aZlI<8jl>&@~4F_N{@ApLnHeWnZJ@1+{X zSOZo-k>S>Z=Z}DS6#WElg(AB5H7W3moSZR@Jj8N0dv>+m_Vgj0M%Z%+9RkKvP*7miS(|Pgp?r*QunLG< zuNsEWt|TQTl^&0m2=syUedud~-n@~Kk;z0m8c?^mw1Fk$0u2kY9~57q#fUz7Iyyij zd?Hk$`S+>2l;pGU0ork+5resa6^P!_Wk}}0ej5FN;Q0-pF%!ps<7Y9J0+M-$yQT#n zKRU|G<5s&k?f$xB(s%WAWBR#4gps8FQ;Hm1t#FX6hgpvxgZQE~CwxXNBXz?DQco|2G*R^tCQ3@5f$;Ef8kwFifJM@|{D?3t2_jmd zzzlh~P@%>SB3=;^nSobh&_O)%POZckZw;ha!T5_70@saWSrLlfnD|37mblp;U^B|a zFufe0L9ad99z|O1{?d(0?(}}6T46&o&I=NVq!g}UGrQf=(*cIAqlZH}?(Xib*xab? zoln!f8hbW{{O@f8+07}veGd9Eg?y92572+)D)^>Cz@>h;P95YrP;NN` zd#XCJ(&~rgKxYEKYaH>+^z={%cnQ?haSaE3m5j2^ux3lPo!;v1?rs$*f~=IlXH#Y) zNpNwQfU;YVeDsLPdCmL?n9mZ7H30Z;e7066lPN#CpYWH!5h2AkfV)Fzl5;jJG&B;K zSEhk2Hdsbp!kX?AJtr(Ie9SR}<;{KdH)(U!!r&|5vK!K)WneH1pvSoHEwjx}`2mJ2 zF3`T(*w|#CgXFXdtE$8>c#HhrBRdM@`}d15Euid0BqSt+h6*i%TV#EEo8RFVnZA?c zAsjt8d+r>VujCRqQ_bpxm-!w%2&?`qy=apK^s0?DY%m*Za7Q3-gUa+dE~u-gC+vr* z#P`f}eU(l~QLjt74q5M*g~i25@__T=3AFA*bBuspN5QURd^jDzXmovw*b-c^Un(QU zEyl_V0Yn0<5HCtUEBE_Yn4kc~jRwFD#h?rLdrUXM2!J4sE-HbY3eEoq(051T*-Qv- z-D)3T)UJ^(+=b&UFd!QvBkD$@4(9Ie?jK(w^%m#n=ONeO2_n>-oew}GQJBe+iKl+1 zNZzQrHoEX^n#}EB+YAIL|I$sxJCm2NN_Id(m2U%rXDEh%UhVOF44kzxq6`nB@N`#`YQiF)839|PlqoSIF2n=K82f(N$^@unYx&*{x z&*P!%Qz&?nPcy}3=?VuB z(1TlVc`N{{nN8fq`M^EKao&=P>kfu>R0hGzF6~jz)9J zlc8Wj+_m9j8?=AIt^(+UuuzDwzu!Np?(_5Cprd6w`&`WVeE|uaIC~{*@J*wD4_a2G4>H&u^Qn*agyx z&2%Uvj3W1m-%};p8@%85vzuiO{Flc8lsD z$tGZj0{1SZE_&_y^?B*uo}LU6D_SCQrT=p7FfMU4@}3%(HB-+kq30`QUum?A6HO`Xlfc zM3)lO=t%qgyPFVcMPCC`K}bjlnD$17hc&@a_!sP=Yt)~rz#wLU!>Y`BO`P1^P7V$z zdq#=L6%>OC;^R}sj`_vKwt<_@+oNrgLCW5W%(spcSZ- z(Au@&9&i}&p8tdNip-t29_4&5QwMq#1Agz{b`pCPcYs0c+@ zLvP)vFIhorE8Kr;4D_4DYwsWD2pdAL{1H-rH@2xbchbe1biCXn{OS_D ziUXv-QD@`+De9aGH1dd#N7*~Ua_ji*(;03oZXSXL8qeN+=ph@fzbnVk8~G0tnk1cX zaj-0$HN2ugm!9ARoCeVID1y#F515qO0&dcaSFc_LH}S}MixFfi)X8hV07n?Thit1* zmE|HAFE1wj=uwI;w9TgWcnzxZl%R+{>t>on1gsGaeYjL29mkp@?2WmU#p$c00+whh z=@`L9JWl`(W@=n6yG$J@Hig|_z9-XW0|YTzdZ7f8QTRo*QgG+Gu9vsC_|1w*2%-5W zpS#n=8<*>DbSJP*fluWrPon2=0GTW_y><2V-g!j-Ee`+zgqbyp zo>P8caD2E&$1}?lGtKDz?GG$gH2)7Q_6w>&L&HOs?(Ew%z8B7)?~#G>%b;07G)H9g zo&FgLRAnZkz z8)}8t3zl}O#s2}H@CgAeUy^6ZZ+5S3IIKmAD^imS7(~(m;f>x`NC~h)ExUK!*io#a|m zKx{CuoV5VPniQE=CJp1`Nw7(wS6K6AMj|t}Ae^lNIX8w?C zywxqKEP3EJg|iE)l@6m(^y=K)+&%9-Q5piHc9IpB$z-u%Fkm@omn%_U29Y97alPR; zprad;mXq7r+R9{=Q0?PM;3E86nKi*h(` zvG9XTmR?p?7SD`Ed6owTeNJ=&7(FEmKnL~p^@t?6Z>d?sy1F`}AyCS^3BEK#mu_GT zicekR3Q{R9`O2rSUxO)ig)}mc$>WeF>=VPovD4-6La6R?(aOomed(=}nFZtw+-hbX zwW2*3fp;jcuFjXVQ?uy%bgVXJWhB2Ntxk?zN0di8BE!Qs;GDVyF|@hu zTAD`C7(|sa$Q)h=s6}{iUQ7m$+m<&Js1655$L=qXT0j<~s}g&_457Vw&Ez*n6}pW= zI92Tcear_NQBgdC&V3OZ`}t}Fp>nO;QH9O?1Kqk;fOo;dSo}2xHfn@sRJw#YMtU-A z2h>%0czR8O!C?7w{rpEn0%r@sKS7w~Fz{1&{uA!@)*y>QJmFws5(~IhG035X(-3`` zhVJ5>Lb^|MG_ZPGm@Zyp&t-3Yzw{RvJ?F{U;!T5(-8S9dujRVc5B1+_f{Y{c`h^?9 z|Fqh6Dqcjx1!8T#Ot;<#wqEo$B7{F0&0nyz)(s6C^KYwf5=%=s4ZgIZVi;H)0s^qG zQ0$5WsCIMhvGo&I=K#zy3hKu8uwV(=|F#$dZdtTaW%Bs+9MdNg5G|c2%E=j~gd&(w zFKuVRN|FEDF)U9eIR#MH&dTaqEe6A96l(_)%ya`lSEG+>ume=^z5J@ZKe$6m@U5me z{5+0k`{yH{hW_jWDC<3h5>9G2(5`)<`Aw_gMOh`OqCNZT-rBa~p9v;KC^4P#iPUsI zc#F{*e&5ci<}Ujg1)vF23L-Yz&*F-l`l*2d{4UIeQIEPgk2=Lp7%cYhDMEqDA9$zi z;2BIQuCH`x%)c$we~JE9m_DaupLb@0A%O?cZ)-KQ@@OH9f6#s&t?0zkAY>XYqTmG_>etemXcPJUT`|-Nf4NnEk6k4m0GvcTk_dc- z6gmhKiEkGy$G=|O{l|oyGMuOW<^)gZXUwWWB!m+vSIr?sM2}ZNLl0yecxctZ%Lys9 zXyO#};S%c^8rtuz>sQ<$AP`#yCnWf7i%LuFY;6;H>>12Bq1V>!1nT|`F`Hz0PESoQ zI0kO>ISsvsa=8c=U{jB>vK@edLr%XHZFR`;zd19nH*YR4??YAoEdvih(|L=8gpZeZ zdu6=s{Gydu?p2%Ae=GpX+YS+8rV!sfzyr*aWHntK9Jcs8Hpa`$%*@Cbd^a~adGa?R z^ERWI>G4QONdfc+DOuiOl?&XRFh`KuIh{7Cy=UN9gFH3L$nzmE5E~W@*e(U+*F*dL z&3Pp`xv!uQH8eN>!FJi@1%!uRH>)enY+0F}7QPSl4Gy9>!c2gb0x~HmGwg9fnf#9c zqe4>$-%L^sE?AgE6liS6%6JfS}J6l7*F(&Vk~hB5IdnXZXe&3D}HL z8azp>vN)vt(mbexFE@*A<`pX(mxh=@w(PtT#%{QLmYbH8G#Pb7$LZn2S3qwtm49M6 zJ5Dnfi$UgdDx{xgA}dTW^*#g6Y7ifGHa6f`p8`-A&;&iAkLR$+daIVN#aBiMqTCbW zXl)a$=?tK?00L!kk=(ikwr>g~7IJyB!SA{$n&^v)kNRx{sLyX&9V+xH!D)@S#rd<9(hk-*Nf8m>-M zdy6r5B=!V>;cjkuIT0uyXVX6@AKUMMy3NKb*x20G8VQkpFWzu2hjs=O9l&%^@1KAL z0MM#NGYg~%Ce#-`H8uH-yz_K=efg%?nH?yk!ctC772pA3gRdVM9UZk8Eqz1$2SfHsS(kY#MbRiu~~12rNqJ!{8Tt%ClSzJg3b)pkk2X1aR_4AZ-{V z!as`o!jE+Spdc`#-%=m^5eS(_8oq_wa8D<`e29v@yfio#gz_0g6aGf1k~N1m>x@ zFcF#OWsa%mjL0(@=9AI4=twZFiP;XZIT-{aFuuPpcCso=WgoiZ;EDM%=`s<&*?B=ro<`o3Z-=lI+BCHpQH*N%SXVlNKl(l| z7Qg|dqo?PL!~iGKwUU!G!?$rih)K1FoZfH7-I+XVrm&+&>r}9z5Onv zq!FGXh>$6XDtJ0%p5iM;FjBO_)=R?*mYS;c}ehDn*r*Yfh=nE0yu3;1_N>nx zIDH)`4Iqeq)t0TQAOVIxZGD#9S7xwa!Gd>a9I)7SEYJ|Q>D%Tx{=DRgFoK8=*zF~CuUuZn0H%v{Lxn+4+Mwg_;#uxD8exnso{ne z$kF@_U9{iM-@mJUyEryt)dD&t|MO>>EcZqIAgNJ?fS%s?yY}Ks2zgP56IA@6%P2|n zF?^!7dnzJ!((@t=F7CYb2fTPW8bNqohItvcY4g0 zHzN@6*Rvl{X6Wph19ylCGGMC7dpy~^nUy-+!Z1BA?<3GU%_~=~#Ca-@)4x5SP9^gm ztu`3bj4pI>#4O1sU;)6DKTa-QbM?@*Lw_z!vNQu?s@% z`uqVNk~FUtbr?KL*}pb;$-YH!0 znDX`a9|Tm;kEetF>ft_lLPrz1?nM?bhRNoSA3vTt;kUHw;T-rf)#(0ta0--G9u#w3 z=Jv-Cm_nE>Mqq^?a_}KAq@y8ps`QLR#K8mn_RQ43j&9d4T7(~yyq^rd-|PDs)IYYt zFK&<0JS1x|m~!pNOB=Giiu02mQMG)yO<>)BzG50C|LU@#h&j{0@>=Meie@ z#NP*Nkmzsy#8ON z)`&tyXrJPzTQ+SvIPA7ew;i`bF&X1r9-b@~0ydymsn@NmgisE`QJlH8+|G}?%6H>M z^h+m_-TS8r{UF0Z6@bIfBj!i=^~jIXni~@D<1zm(MjZuZ5Bg)p7KSv<}$lr4xs@inGdXM6#eS?fA~0w9gas4T=q)2ao`-bjrBIXf-?#h?naO@jrwWK^0L4DkDzg9i30rF=h&n1j zNyDQ!2SsL6zpGQT()@EV35Lj9RM!q{Hz3Ym;Xlvc{L?t~uX*1tabW){u!iM$W>W3K z|CFwmE2_=;ZIjdksLaIP$_8HZ*iS^8CB5;o+2 zL;fWwa#V%BE|UhVib7MM!2a1z)W)}W>hr+!LFR4Iw_9&l)xHU#!ZXX^Jo!#BF(uX2 z4xfBD-sOVOdKrkw)eJrp&4N}~7^2nijggX)a`kG-(_k(MTp;-V-MdGqnv$Vh1>yDd z=~F22!YNQiaDEonD+tA0%Q8XLvP%Jfs2C_Z`ueou^r$qvy}bH*dv#jzxhYnxFh}%! z@gnRvMnMjs^$OaCk?*VrhDlspvO!;!o;;rCDu7erb8gN(CgOFOH44`KQNB{&(J}#% zvSst;hWdJ?tG(UbyX{9T@wU&obTk<#XCMQ4yQuEjvwfKFL-`1V9ezOsB3<%&G|9i* zxq0)HzWyNOe{OyLe05Oc0IdEIZK==1|LyHf~GI__M0NQk3^k* zoR*gMJZ50S4agB7mX7Vk=s0=xuX`bQwjs3HRN~c`RE&B2Vz0Z~Pvm87n}Qv(L>J!a zVeYXcN3T!W*^MY%WQiDrU)^WEaza;S}7(BW0yg2gS zwlDhh#!4C|qtO>qICzj_+cqK;L&7Y@hQM|I5d$qP?WN;Tt~Xc=zlvv-2MArm$atuH z#mbe$0CulQaC|Vh!lSaGOXXMLY{ghDtJNOEt1=VvELCtuX(cKe)?T*z`>$?3XJB{{ zWf%%x8edpgS^aoN`g^D`8`Ho$bK_VtN@6smHRyS?GtS3X_7PJ8b-Vh5jZhvPIhJah z==U6zueIOp+Yb`23;-W)$YQbUQKHI-+DDBkiLuzsR*@wpfx3(PqPjmV+#%WMbTe)g z5$2_0*4ENu{`~@-RdnEM#fY(9bW{A7oUrYbQkP1T4(dD5C{;R& z`iEu|L(gk+4^hTj?LQf^>)AFEHghrhgXODME-}$>cPA5$D&8Uc<=c~JG-U2OCK;4) z+x_hL@gB&6zp1?)UFuO3{Y59yWEPLR_Yc%LWefdj7H^vPCjCnfkZ`&Pi%d}=q zW22--d748SePjySCcn)$0`0^}Q)LL0uoN0rr>6L^fY~w8OzM0DgnKmhtlSI3Mvu2* z7qyO&>~FH&aqBe;6R58mDo|q4f{+_;>ke_p{Hi7TOSunr24OrTGQ^&j0{5&JijD}0 zA9$jxWZH}xh^o?P87kYTT>yXoUa^mT2M!BrX^@8eqVio=e218wZZF0HQV{ zs9Gj~{~80^FAb0J4@G?;`i$_D?aV(P%D?YW3VgQE=k6c3D~)5x^bg;lfh&LH$XzR% znq70Q09co+-itgIDb@>LUmc$>3{09_&2P zd)cNfu@QJ%(7VhG{g!S@75;y{p??dG^zB=>FsMt%%xsSw&hs6YgYmZO_2`SCxx0AD z5;Qh3zETXDYQx%MxR*wFtlPbF_`2pZa^4Pa+RuT(U}j0q52E-zG_iYkpK! zG))xp8u&xq5#{cH^{&MZI_y^4)#DC$Y}ZUEpwGY^$K;Dl4r*2~`TT}^9?*-L)Mnrp z++89xl>Jz%FlYWE8HPb+Ycj2OT|+IQo|l_Ty9p<%V+m^Dl4Pm#m!l3>d0xLB=0_MN z;F??|L|xG}2Zz(&Mq3xb%H41SLbetOTlD*Ap6r#B1Sa@InbCXxDT=B-DaPwb+-z)n zeejlV8Ij>noWB41tZMkl;CuH_825DLY59c*R zQzJB#wO^R%NFR%hXpqTAPKh);4yGB?1jQ!}4YzqVLQZH@k$_f7?fWi-wkm|GxN6J~ zl({lzc$RO(VMS{zBBt;&p0{Fk>t&q(AqrT!mn}TO#m=5!*?HgU%WXXEaRw!MA}tN* z$@+YN-E#P$p}UxhwdiRotgY4V>>#MSyx`)arwZugLF_U+lm9y+)Qfg~V1p3Kt~uPd zEZ!J`c7n?8UZLnc=K!NHT7Hq?ns=G)op|V^@TjkVm)g6l%ZkQ~g*tft6+s3$_vp{b zMR;Db$xIbFC&E?xBfW-2S2Tj=`~~C(JR+--Y`^N$CJ|IgIN&(~sl{M)F{cGl0m(>E zl644({pwPURQ*NNOg>j8;_3JL$MTQAr-0pH&rE0K{%zOEx&@zg`mHWpng3Vxr^D(g z-)FmGwEI`eD>mLCJ$W^cj7@(Sh5DH=#N+?vXScu+pah4N{wGcLRd;P%G`!~gk*S-t zDoOStz5yH}7$!@}%X=jrk@v$Sk4*4UI!CHqEFKSklaVWWs0|7IVy{*?DI^7DR6h{Q6(<@jk;+r?E-gCa*ka_!>cLO3N|ORV=6 zCl)5KOHbq|m*debESI5=9mB{Ebl49iSRP);ZNV-Rl2E3}WMwh&eGo;r?$k|>vWDn` z5CP#?uof~ZeHs2B?E%rzO>LZwyQkM?^wwh(1ZUB88#6Vv)3%j5p|e@XiFmePqeG

J4X`(uKUa7GdXmLOMD{~I=no#Xoo*GEq? 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 z zAnyWl6dD#r5RTH*(;q*6jOmZaF9MGrJt`$BC?u4EXAMt;UOO-DuG@7d!79FH)dz5~ zmH#TzY7q!d+9QMRS9g!j8k_5H+L7L2fNg~PwI0=j|dU+KL(gx{RRn@myWv%b+t{p_siO~|X!nVz28E@H7&~c9+WZI2M5B?{P z9<4w@y_aW2N%B{WMh=`CD-_^nwzsZ=G2@2 z2ct`MVtkaIJO!ip&)B|Ta*^-siwRz8^HA{auN^f(zH2sOh_4=!GTHPiWRFqn&PI0! zu5Pzx8A_4);l^IP?`N@HHQ?)LwCl+ZB5|7foR-T1CJxdA`wN#Wn{xpP#R-*kHV;+Y z<`vd+{@O>WYE7kXw==v`_3CsPL?p1?V!^{R@PRgip|$L5e&6z`>VD4Co^)uQN_U9k z|3D0fsi`UKN(i%5vtV-KukNBwM*f2A$fVO1@#pWChlPu>SYSWWv9XFmrAyL_ zpI(25lY35SIp>b}%)ppE8)zAZqZ*(lD)F573#-$M{SW=|4J6>($Mq0f%Q847m9t7q zOP3qgbK$Lc{_(AR&l;y4isFZ1j!)4W4ZNW(e|$q9a{yd_@2oT2W4-4K$-lp;7GK3< z$6kWY3Y5(nGE>6$XXVP39Fxf2MxY#tfAYFBzxA)bzs6tijW)yQ%6p(${?P(Mc2Wns z9|iED+HpejQm~{G$`83Oyk(2Nu`L)d1ZV z=)mfzQ_*C_V0pa{NCXHK$I6v^x7Jy;b5^~W&L&F>fjh&%Se7w7A%TydpC9UK5fR&l ztQ(z$Z7Bk87wwc3789GqG@kpACj*4Q_QN1G_JNnpj5c)wCgMiv^7(mre()u*e*Ng+ z-K@QJp3z=|m{dE4Mkc1FK&EU6tB$6w{-?icxCOu6Ko$ah6{0V)N2>#-V_s_KEq|0B zlcY7$*MGoupxgv#RGhd?9$b`n@$i_Sr-kH91QLV}mDp1_!w%x;L>UWOggR$XFJUx; zrVfU;6{9g4(UmOpq^m)jszt|DAWZ=RGUU_H6B9IXL}Y;a3B2FF47%}LT3+zxft+;gMBi;Um*KG^N0JuSY%(71Z30&qnP3s0 zr?hG+3@di@rnzQXKi}%SDEXA6%}+2*6_iI!gTmKc4BpJ!i&g@@h_K1%D-?=z_`C-c zqTs1#uU{4c&0OgKpiLyF*|*2-ZV-!S9-KP&wAo%scQ}g>`W3OoU;rhaZ)j*}=lXQL z(oI#+AQUFTBRQ){iSpRfsb zO)S2@w z3%h@1+5m_P4+DUU-9o1q08omxE zBy2Y(VCa4CUJ<>*rF3M>z}T%0unAzUL~5$P8DK#$H2EQ^K;u(+GtM9BrC0>1un&W2 zLtNZ0)joJ9D&06&+53_f4QI~X2Eo~{8E@I`NW?*|Yj0s8Fy7@%yP?HDJ0-Z+DwoMT z3-!oB46Du_4~g#;B(-X^qu#8USJ1Wc9bxnK4FJ)wC!oIuF@H7yf8nJot9?uR;9?hv zNpz&8Wj<49{GTII@rc3uDU*Tx^UC6p@j$p;oCqH_M`;Gahb>#@8~7hJ8lU{?aES`v z!?{MG=d$A0?%}woq;z+X_G*RymApCz>PzCw>)02s7&}x~S{fWHm!T{?)}1*fHeNa+ zOuF}9H{8bw-v(PDr_95!#U$8J-S`6oqYILzQq8|1VnZAxS6$$+`U5K9qE6E-Z4EDL z%@|C3Pzk|t`H&bZzw@t*>{psk!n*GU7idNw)YSSrs=bFDYFPhRtX0z(E@Ne5YeK

=*ULBGMvbN49$K&fkT3WLVO7l@&l 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 literal 44594 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 diff --git a/docs/sequence-diagrams/puml/onchain-renewal.puml b/docs/sequence-diagrams/puml/onchain-renewal.puml index e386f18..7492238 100644 --- a/docs/sequence-diagrams/puml/onchain-renewal.puml +++ b/docs/sequence-diagrams/puml/onchain-renewal.puml @@ -18,11 +18,24 @@ deactivate d3 Owner -> Controller: renew(RenewalVoucher, sig) activate Controller -Controller -> Controller: Process CSPR payment +Controller -> Controller: verify voucher\nexpiration +Controller -> Controller: verify voucher\nsignature +Controller -> Controller: process CSPR payment Controller -> "Events": Payment event Controller -> Registrar: renew(RenewalVoucher, sig) activate Registrar -Registrar -> Registrar: verify voucher +Registrar -> Registrar: verify voucher\nexpiration +Registrar -> Registry: get_token_metadata(name_hash) +Registry -> Registrar +Registrar -> Registrar: check expiration date +alt expiration+grace_period < blocktime + Registrar -> Registry: burn(name_hash) + Registry -> Registry: Clear resolver + Registry -> "Events": MetadataUpdated event + Registry -> Registry: burn token + Registry -> "Events": Burn event + Registrar ->x d3: Revert with\ngrace_period_expired\nerror +end Registrar -> Registry: set_token_metadata(new_metadata) activate Registry Registry -> Registry: update metadata diff --git a/docs/sequence-diagrams/puml/set-grace-period.png b/docs/sequence-diagrams/puml/set-grace-period.png new file mode 100644 index 0000000000000000000000000000000000000000..78ceb6a8f568e5d196a34ad62be3891e4e952f2f GIT binary patch literal 14220 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 literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/set-grace-period.puml b/docs/sequence-diagrams/puml/set-grace-period.puml new file mode 100644 index 0000000..21526bf --- /dev/null +++ b/docs/sequence-diagrams/puml/set-grace-period.puml @@ -0,0 +1,16 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor "Registrar admin" +participant "Registrar" + +== Set grace period time span == + +"Registrar admin" -> "Registrar": set_grace_period(timespan) +activate "Registrar" +"Registrar" -> "Registrar": Update grace_period +"Registrar" -> "Registrar admin" +deactivate "Registrar" + +@enduml diff --git a/docs/sequence-diagrams/puml/set-resolver.puml b/docs/sequence-diagrams/puml/set-resolver.puml index 75242c0..8b6741c 100644 --- a/docs/sequence-diagrams/puml/set-resolver.puml +++ b/docs/sequence-diagrams/puml/set-resolver.puml @@ -10,10 +10,10 @@ boundary "Events" == Set resolver == -"Domain owner" -> Controller: Set resolver +"Domain owner" -> Controller: set_resolver(cspr_name,resolver_hash) activate Controller -Controller -> Registry: set_token_metadata() +Controller -> Registry: set_token_metadata(new_metadata) activate Registry Registry -> "Events": MetadataUpdated event Registry -> Controller diff --git a/docs/sequence-diagrams/puml/set-reverse-resolution.puml b/docs/sequence-diagrams/puml/set-reverse-resolution.puml index fa94122..186c016 100644 --- a/docs/sequence-diagrams/puml/set-reverse-resolution.puml +++ b/docs/sequence-diagrams/puml/set-reverse-resolution.puml @@ -9,7 +9,7 @@ participant "Reverse Resolver" == Set reverse resolution == -Owner -> Controller: Set reverse resolution +Owner -> Controller: set reverse resolution activate Controller Controller -> "Reverse Resolver": set_reverse_resolution() activate "Reverse Resolver" diff --git a/docs/sequence-diagrams/puml/set-transfer-filter.png b/docs/sequence-diagrams/puml/set-transfer-filter.png new file mode 100644 index 0000000000000000000000000000000000000000..afb200c32e7d53d699e670dc593aa58979da3de5 GIT binary patch literal 18776 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 "Registry": set_transfer_filter(contract_package_hash) +activate "Registry" +Registry -> Registry: set filter contract +Registry -> "Events": VariablesSet event +"Registry" -> "Registry Admin" +deactivate "Registry" + +@enduml diff --git a/docs/sequence-diagrams/puml/transfer-domain.png b/docs/sequence-diagrams/puml/transfer-domain.png index ff859829947a549cb253ee958a959d69eda24a03..45fb946ce70b221361e77b361de0ac378dd7bbc5 100644 GIT binary patch literal 31541 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 z≧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 T3&zWE5(4!={C?IwwP*herrpd{ diff --git a/docs/sequence-diagrams/puml/transfer-domain.puml b/docs/sequence-diagrams/puml/transfer-domain.puml index bbcdac4..f187540 100644 --- a/docs/sequence-diagrams/puml/transfer-domain.puml +++ b/docs/sequence-diagrams/puml/transfer-domain.puml @@ -10,10 +10,15 @@ boundary "Events" Owner -> Registry: transfer(new_owner, cspr_name_token_id) activate Registry -Registry -> Registry: Clear resolver +Registry -> Registrar: can_transfer(cspr_name_token_id) +Registrar -> Registry +alt Cannot transfer + Registry ->X Owner: Revert with cannot_transfer error +end +Registry -> Registry: clear resolver Registry -> "Events": MetadataUpdated event -Registry -> Registry: Clear operator -Registry -> Registry : Set new owner +Registry -> Registry: clear operator +Registry -> Registry : set new owner Registry -> "Events": Transfer event Registry -> Owner deactivate Registry diff --git a/docs/sequence-diagrams/puml/transfer-from-domain.png b/docs/sequence-diagrams/puml/transfer-from-domain.png index 3bd6bac7dcf4b571a6cb69ce191ddea4585b77e1..1abb929022ca77bb7c8358b15a6cc250f9ddc96e 100644 GIT binary patch literal 33607 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

Tries to deploy a contract with given init args. Read more
§

fn deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> <R as OdraContract>::HostRef
where + T: OdraConfig,

Deploys a contract with given init args and configuration. Read more
§

fn try_deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> Result<<R as OdraContract>::HostRef, OdraError>
where + T: OdraConfig,

Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where - T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ T: OdraContract,
§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
§

impl<T> Revertible for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where - E: Into<OdraError>,

Reverts the contract execution with the given error.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + E: Into<OdraError>,

baf~HP+J4WA940{|STxw^T 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 diff --git a/docs/sequence-diagrams/puml/set-reverse-resolution.png b/docs/sequence-diagrams/puml/set-reverse-resolution.png index 77121db8ea9f3f1727fc1e60d5537a3ea927cda4..3d996bf07d62ef2986cfaa03094f297f636c5ff5 100644 GIT binary patch literal 17874 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 Jd6M^i{uhpUSGfQH literal 20400 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 T3&zWE5(4!={C?IwwP*herrpd{ literal 22575 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%0DF#WP)Zq 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 LS3j3^P6pi+}t*3kHfx{_7Yimm@0S*pJ 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 P6+-HU-1Veu_uT#m@~U8U literal 23766 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 diff --git a/docs/sequence-diagrams/puml/whitelist-controller.png b/docs/sequence-diagrams/puml/whitelist-controller.png index f7925211aca2c6dc050f2ad2f934ea9782f0f096..083b6891edc7fc586fd73a25d2bf23bd03bbd9d8 100644 GIT binary patch literal 12380 zcmc(_WmJ}3*Dib_3P__g5{iO=fV6;wARyh1bX_1N-5@ClNSAaslF~>@Hwt)>(j6Ba zd*L1L{k-4%J>waB>^-(W6c_7UJ?A`*W6t+-GGbWhr05U?VTr$bsQ^JYZa@$c2O9Vr zA}yu73;vu(Ec3V`OXxi5XcMz16cbGNjUXrZTm&v$o}7X10E#XK80|@rKF3 z%EF<)n-UCR4pUOI`>P#70^>M++Khn9vu+R~AwzF~^^rVkCjmt!P1+e|X|#0$$;WQjC#p&?ywONPGPi4e)5$gK$9Pc$O2 zX2i#bNg#C_hD30}%TUli467yBK75-YPVJZX@zJ+?iZ>tFrrxc*IeT_YjM4gjT{ksz zh+bUHGbYr(5y!ftb#jreqxA^cz}8SHbde@wHu}MITU6&K0X|iX9DOnWrU~x6fn+r! zJr)m+Pv`s&&$xb3?mpEeAslL%WmvrWc1b)@c#vjCUlI7C=R%w;meg`-AH#XwoHf^5eGLs?`%;woroGi_ zaGbos50OYbrWj0veS;t-2l1CLl$^9T;kV`RRWDJk<#q(ary{M%M7&>)tI4y6zhb8l z$G6S>TqfSlk?^ImPTkR7ycu~{@R2B%_IpA7dAu+u-QJGKpd&o3n>TN~bE0%g-@UxL ztl!HT`Tq1No0Oxcz?evb$9CVkWt_*%R=ka!(@h9MS)wWiH%$Ek6M~3I^&zNv5EmJO z{IeT~A3uJ4elRi+5s^K@YBBl2d4Gw3fZ#nZ5+sN)r9+WPeojCX`_%I?*4cTHR#w{x zBbta=CWRfg7tdzWh6Bb_WWS4yihYklfIsca@eLek?(KYAyLjZC^78U_959FSWT1Ch z+1qYtb%R-}yQc(CZ2+QCrBqlIjy#U6HiGlwizmc3fn!u%+zm zY;jumiAU51>Uw%5PH`f~in%q;)!=BM|?dEg9;IkGw_9Of~9 zHNScl_aJF2I%aRLAP@=iS{o6>oV5hocL7s4S^fFLaV9S0g)pT;+1W;cph7WZmL0UK zAY!Q5tO5@?Y$r(wg2vP0iJg3{h;KoqHyGQY)~hD(xz?GED=x4o$;n_O>??iO$+RDq8?F)@*smp4C2uOwSEuK|^Y9y=vG~K&WC=Nv;O2dlgSKgdRFv(D{Q5{th|rsO@NQkGH>u|xr9;~+ zNSCha0}?7KDl7|&uuTwNu-Jrg_kw{9Dy7OIwstCf;p2aK>75~Vb#c7QHf(9kNMq1! z7?8ji=*?psZuNe4h8qcr$-0AFD5vE%my>eHf8|!9*E${UP`>ewIQNn32X71_CbeI@ z3qQC9hfKkGbIBuFnqz!W!(3gth{oMc7WYEQTUWKe4lwI({0NhjVA{=I9a%m;J>}-+ zMnypxNIbel8AMc87J9HcGSkyjCmu=Td8!zDa1dRn95~h+$5O3aFdiBjT2X7eoaS+% zZR2=kZEtZnEQwrJ9(+>TVmW+^MJ{%Dc=!ndYnUB7gr@kG*JPdt=3rEx>i1&!9n#5g z4?_G;S=<*j%i70BO$+LG`&Ofn3RH}imQ%7*EGD0S4Vd>UEzOx8 z*8%B7hn=yDv;7-4-l^3{#ume13{E4%SqzyhgB37E7qsnGA{gfR@q#6cOJi@Zdv$Nd zkgJLcSPXt%o7cx`$9)|Sy7{8yWNk#jXo2d$&`>y!Ts%ijO${ZlN{8$4qb8q+DE!B> zl5?_1!7iSuS*J zZcaHKFAFRNRt)ID%r zL)u-~40Ti}Pd<1o%+uHDZ8gSEQ3`rWbwHXPm)ujWt!&KO_?nwPPbTsd6*I$l=$z#P zyVv#+TX3=0uMfuncEZ`Ea`CxQ@Px#>sxC@Clc=TYBj(jbDTfqMcT{vHbIJUS!x?k=bK8yorw@-=g zj<)y`IqeY#2iK3I_P#D6n9yDNvwV|>`?z8Sj==dx5njQJO4tG~Y#6i6E2wHtVhd*kq^MZY=RRdD$h!>D;Iv-RV1>%f5Qmq>Q_^769c$QPT1 zpKy4J>lSw-k8U$G9YVxow^C{`#knTfl%?0|k44TC#euYv$e~ZgdDxfYF{vqM?Qn5g zl$J)mFi#_S_T%jf%yWUubh$Tgo>+yvf6wi-L#4yW%#3sUww_UfFnFQg5?3VDNs)_- zi_2z68AE{63_~~nV*b5&XiF6*fD>1SXt!i;Vbnn(#FDYnWVWAoY*Pk%!R8U=AeGu7H z*wxy)&>hWCPn#&N9#7N}Mkz~Oe|33ALPBEF|7kAC8MRU3ew(VKq$FLCo15DYrd`IM z+S_z|Z6hO!MzoatZr>6!3x?mVkTE;m^=ee7M%l1naltHY*_^7zx%Uj0f`Z?9&v1G& zSDt$Afbn4v61`-OjL`S(uCA_thji%!^h&ojfu#;h0#34qb+zwLj<|X%hmg1 zUGxZLn0Mqjv~ovZP}VS;aY#!=OKW3s(f;DpzKWE9pi=ki4LwwugLK?zWn(D?1%>&g zrH*c3U`N|C%hKtW(h2M};4v_4PgY90tBJ1OUt>n!b&3AhL07dzRkuKdFzyO7t>0i+#KqWnsXdqo7Ahkxz4^0-tpEod zeX`65!!tyr0w;;bKK;zUySrOB0Nc;sUm_q{!3Axzv|F>SNkH3KSz|Vn1FH1}F*F_~ z$rF2VybuN+say1tT*B$zTfaVeDqL?j-l=W*h2X|K8-I< zyZXC&>rs9Ny1*(yIE{{uK0DkD4h(!HBSUxuL7Tu&n7EwMuWsapE$+;<*erA~xTDK^ zKDmdyy1J^Tr^m#^WJmciB0}Np3P9?Ok+rdc99h}%#WL%;mO97nARM(O(6`F>%7&u( znRTOPn7={uv+V_BsNZoNeBgyL>sCzxqM+%&G+=c?)2uh1Vt?8m&zJ)t$ZPVyBm->d&|<#r{XA{)BJrAAH49d!R~o-yhkmN-(bfXAA*-Ym zRcX*Hw_F!;AEm;(9ZIqyfDQwa;{%a4g)mK#^`Q+CeZdi2dVa zeC01N{~mIbALWM$cUz^hQo`tMO0|U-8!?Sx{bg@(k#+e3kt{xjAPEQvLE-MR5c#+59gvrKD83_q}j*%SM9OX3?`Ayrp1UPXyk80dZQ;b;+_gt$vcT}_* zti3!&pcru&M5CP!!9olgwr!6M#*wrKL4lWs&&llN3ifYEbvp#kMCvN#lj; zY>tjc+6^v6+6@Vgvud(=Ahw8#iVhnfBO?<%QER4WeqGCM(D8vb#Vz9S)1lsE1x%?m z;fLw)!s){JWoe`x8vCn@Q$zt$2AcP~Z!CQB+TU4Z8Yhdkyl;Qx&xX{4F7zF2SltjU&6#3tk181TGgOS)>hJY}#? z9ZBYqs}AbSIr?~CSmx8S&%ko%M>1PG^rVMb+04hEj>7!`#NGtuLw zqVnnnN01Rvs9C*rvYZlo7~XEF<8ruh(gb$>G%Vdv z`i)d%=cB^3nLC@r1uWcu?WXMzRZX5lY#Uw&;%oW-QeVb62xp}(SxMp8=68aT25;J+ z$zcXwCF{oifYG=I#~I(u&*>3PuprMjo>neUk-yKuftda3qm)`8G#<%^{MObs&+YQu zIUv7BSTC}ow^aHbk6mCl`(61OfC7g5TUg;Y*-Zy^fd^nml#;?I)h{nENA+eJ-P2uo z(DQThg1Ujjz+R$^E%je~VDQ!uHt~!3<+H}XO&qyvgfP0czTTq}?I6liC@wJ|TPi${ zD~M_8Hw+V1bx@)tBI0s6Sm_8MOX0TlhZEMH@AcR&_h)4vO}mC6@RO!ml(SezO7(|WnLZ48#$WsWZtCi>FRpV6WHRzZZ;aY2D_8VN=_BMs;eGp zDm9mHXFHr=7W(9g>ORqfo|nIS9H~^#K>_aTSL8?geF||DgnVmo3h28SjCR0 z*jNnS$D1GQa3gopKl%p>3yxUfk*(@MYBsG!--1>&|_&108AFC_pv2-smaG5lGTg6$=!!{0B`Gms_G}fBAD#5MrW2z z<`#5QMNvg%JoN=~J|+gn0{rD&Uu$Kx?8v^UDb3ONw^`tU1H{A6&kw9KgHHQYQ19ey zyD6uuy|1qb#5ud1GWRnF6=vQq-(qz<04@=qLPtl}PqBGG#H5u-+H0 zqb`qRu?l+lC%cicd+G~JC`0b7U-}Sg+=%8{X!(b zkH=%_|CgT^R8ks!2A%m_MQC3;_hxXs_f{ zO%yJ@GqwF*q{=k>#V7)BIp9L)HA<0HuBN64vX*NV8t(9ZayLuu5VP4|lD4wiZfOy+ z@#z~o#x3kTbkz@M)G)&pb>I*Xm;piwcwkKe(1y>g%R~Dt6f2T=x8lT&X0UYegi5Eyz z`Nq%q&d0~r)>fUHk1vVf?c29PLP8YEeAKHFRRFI6yfVOl_GGLadn100s(Fp_xzoqE zIAUDf*}1vht-9^$dS}HSI%+>^?agy!l1RBM?~#(8_HoUW(hQlFZNck^C@Hs>m%o=8 z^$ZAHeNw(WoU-yfo0`eZ76~R)N>x_brmDUg#*)_q#@pD~2yAyP<2^ckC&Rs`PoM65 z*YPxx4y$lRE6c^%^punP7#sUNfYQThxu0A`M^5gk(~hpJtSlE-^$Q=A*Y!@}V?7kl zW+K6=D=pzJ{hzq$sRzA3ka7gA!7|w2b!B{9q&i}7&#aeUwN*C4&Ek_M^(FB2jrQ~N zv-3wM?W1yS^bz@XK2afb2;2RNN|~9Rt&mn<|8r~%0l1-3_T3NtYhua+-+-e_erEG7 zxevs@pr9cAu!w$|UJzn{D^Uh-M_!%iT5l`e?2scI|0nD*DnC(4Bk zyQAp%Tn{tV5#Sp@XpE!TYueh{qEz39hRVEprHi0BN-1ePT?4o<#khd}&*S(gbJ^W3 zq2iI*C;U;w-IO6GUruj+;YywB!2^AOK&vg`wP2n&76Z`_#9!Bpa6WBzfnee8=GJ(1 z>59PPKlv32m|b%5aGj%7q}YAQRn`0o`K;yq4JrxObapfbwA&0YYnMH=e?5lJ9v7!v zGj5US*RW^*BNLQ&-a%&d=11wA{1{tAzuI^t4eRBHsD2tLu!b;7f&T90{-ph*BNHRo z6>YMUK7aTZjke?|)0@ zcVhskAhN--!C{jWu25RG;XOjNzdVq0<^=@fzy#tsG&?Q!kTRe;|C0Zva2kz%n=Ai7 zE1LWzOg0JyuULWsW>`Cg%bxJ!&CBd`>|4NXx%CsPyc=zRkMtR^e+fWKDCCe8PJ z=$s%yizkoDLvrsXz~Z!P9T)*Pl-a>_%*-WK7E_kf_3ESf@3NI@GZpeOZxof4nF_92 z?u>yxd&-d+yYISp(NQrmF`v-W&lhMszo|Yd=D+}yQMWliqUX<_|A<4Ze>Xvtp~{e( zzP$qQh`LaT#Jj0kM3_5{2VMPKK3zF0L}j_ATQ&MHlgH;30|o}hYAm%WyU)f6HsSq! zlM$X;S)H1rIhf&z4P@&Xy*tHOSgCNpTlFYGE_()s>bQu-D$%-JQFO1Vn!sDJjgc z!M-Q(g?(9Z3CiQOf)Wbux4uj(D}|{Av6qhbno95eEFhwe7XmqLaz>b4o0mk z|B3Gy!)BAIaJnUp*ut&I&Yrbq?2+PKsn2c8Zf z!0e|P;(V%1=66q^8O&46$qy6kY@Z=Zl}>z)t}fA}kQLI+uNsXaKN-1(`JiZHrb)n4 zfMg@!dN&>?i$t`vIe-Prod5|zslUJ9`1fYw_*|>%>UeeBcV>~=#lfS0t);~SBo?5h zWT6(nt~<=jNlxcokxAmQm}yK>4ib&D2MqqpmuKDdJh6n=pnP=$_~)z1baaAa1{{eq z=07ed-?JXG4-GKbTeoh#Q4S8E>PcIR6!P}=PEJl{FWQeaXJuo9$pGqmxWAwA^+c`= zwO^BtOh{N5m{%d|4f1aQ;qX0wZkjpy{#z5}(Bugi6Skx$`K*Hzorno%{o-&1i z$Gt1JUjDB02}mk^{U@;P_vRcj4us|Lzzr!72byz;91?wFSiQ|=F}c;)Pwd!5_GS+M&oufavBU=L?kc#?m%UQV!8mT z%aHEE9cLwwJPDGS1V9bdA0T!{ zHnzyVvxgwwu(Kabn4~N^BCp+TaAAlOX$50WwzH)gbcRMDWr&8{Y2ZrbA1bJRrw+0; zy5>qU2Fb@+`j1}M!m?}TAF~6@3!H>~8=;|Mu(3n2NKjlhF^KLkXb@q3dai9<_NH&ob&mihTak&uumC@8iY&$htq>J8rjC4E3moww7= zHn6kq&I)1{onrR+w5;Hv^^<mD!pc7&2MYzSW>N<2T){KSHwZ*tdnG(I>u=zey1 z+x&0~PKJxy+|6FFw7B@0_4OsjHi{D;{LxNV>>ArYgNgR`%E~u%sXB*EAOPGi#M6tt zYT<85^a0YabP`WA*KLsGZ2t25G!WqGad2>EYHXJ)>4CC@hJhg|BV$~|UU0ZN641ak z2(&R@-YY|p~5SWWuxx!{i}si;sqv!0Ds z)t-}<0#3>c3HfC-Sh}>Vtfvw}{QjgIV2&WhZQ24BCdu5;c6x2Me=Y>bMC{8z)S4(l zCs=u#T+O58uJHKj)4`Du+k=&%^F?a{=+dR@;Wk=r2Hd7 zR90EdOt-iDRsGi52jmx*`VvK=fwb?m6mOyy|G*GDV)pEU0&@@}oR{-e!!Bo!IyFO; zQEoxGkFIUYN?AV(rnJs}F8Nin4dThZwtxB;nBRtXm~Z_yz-#BAd|O{I#^00fw>71# zjA?#-0)8wNTf6JtQ%f^_pAl$*UVI8EW@DN~MV8f;HrLci1T)oOO|i(OpmJ<;oKfc5 z)q&y1@~bs8;g<0EYX=uLnxlbGF)x@Z(!2)}{~O__N(Iwq7WQ@a!T-^SUN|3ati)Y^ zBvGtYQ}$+}48)Z8WKX{S8n3(s<~w}lp05mpH+f!x;3X_93}hN=%W~Z4B6GYyr(>|l z>bdg6AOfmZmDw0Q6;-nf$<8awbs*6F_J(8VnyY(P4M)=ea^_6T3=EV2M5NN^C6;|C zZTq*E%+WAgjJ*Ob1i0&L(jX)O;0L}Vr z(CP2%TVXa9B;Chczas?jsD(9GD%#uwT_v!~i>5jKNaD4GAl<{WnhKrseg@26uN7(uE zX#S2Te+2^|gLYL1?#@$rIs6$OKnpsVTRRn`7X3${8B)glvB!Xd)SUlkXpqrwKGb1B zgH*Eqh#VE<$o9tsK9H{R-ysfEXt*UDXx{L;|K8+gE*(~9bD?_q4(Nm8jT5LDRt5ID z3;uWNPh3io)CT#K5Z@eRSUtgxNiQItz3#`8@wQQz5e9Zu5{UGn_16hD2hb4yFKW=E zZ9xPKckbp$r6dT!L6Z>Fj?rDS#N_kJnAW(vR|3MJ#Z>`&sIZyl!t z!8DHXzMh2o1i|Xf{KQARb=JG{?bp8{YxnZ;3E@;iUfN2$&VkbMdj#37jZU!IE=gUh z{kNH)h=A>l1`lY6(0ul%$ z^4)7@eCy`TXS}@C7E^#OH!TY93dze4HG3liI+ws{0aC@^r4uFSG6_r(*hi+(n8x;oiFnFzfOH!tIN;F;W%YrEMdNSsFfTu)vo$N0+)Yl)= zdxc)l#*g9)(!($A-m^j+9v16l0VN*D7o*u^}*n9@k3c!66W}szC0J&6)Ie(P;sTuT<=O6nNhZ8k*HYVGjP2odz|3*ICD7#c*+77auBI&! z(CUTt_2pl`?hz9|x0)t$d#wGfn`byj){~jpD#7jYActvnl|j7#w;-Oyz_LK42ng3O z`{jP&i_?brt*yDW$&IX76hjlDeLX*TW^kH8v%)n!X>@nBVT4R|5C&e^ZyIYIHe&_{ zLl4SRXP@+~4)7hdG+mJoB$&$NV5(Kpvk6?WU%VMvx(#X{eEs+cC{v;$6%%3|%@Avp zD=NYc85NU7nqdvDVV{*J=Yt5yFfaxdmy+FCnizNQ(DJf}S)_h!WJL1R#&-PI z(vru98p*bJ>^XJ>@$syW=OCI@17a&Dh3UE7$`|X5`d$?}-(z4g-1s8e+S6}hj|oNK znHc)b9t8OK9;d4&;^HH)cutFsdgp!M-P)3%<^&~uFM^<;ev6-98r;vYug*>GSy}uj z4YxieWJ)JaEn`P9Opoe(Zqe+GdJtLwvFFqdU zJtZxzmh%&x;Uw}aMS17l`2$dz#c*K`O46QPmw2Uk_8;!-^!D(!tMEE{IINB0uV%M2crZbkmt-`Dtm(Ef!tJ!)<}*9&Yc3 zrM1Mn{!wblkZX)ND5SbIlI`Bz-4j~^@`|s-)vXUqyO^8K6T)|2S6lLda*{LI=W|Ui z2%OHal(ZD3nEvl}uTzp6>3QqovJsh?6L@$@Y7Hqm&EIuO=opJ|5hftFhX-T=IcrWf zTa#C>cvnj$z)?0v#l$G0ytw3rr-h6(k^>>rK*?nJ33fWkwz+Hx*jDf00ae>iDI^OG@gvex?-UB7wa@} zuvZvp{WOG8f-tUrs_sD}?Vqk}3-%&RLDe;iM;s~HFqWP~xJJX@#_!-1}o z?x0Ndzn2~Sqw;jZ0JBi5=B)}xTSrGw!LLEnc|a|j4GxKs$Jj9(LA`I~KRN>}_b=tI z|7P6(tZPw6Gl2j8m?T01?OA5@(Ag$0oMSf!0_?*oN<7ND#ZB-p@(D|ma% zXWa*N6ocBBhK7b4(+!Cw3h`z)H^HYUA??ke9ttGjsq-^Q^NEyiK!Wz5;<>E6Tv1W6 zy;3ZW!F8@j#a~`{Y2@J`@If)K z7b{kqAY%DwE%O!xp~0w7dR;0zf0>Ix5S8IJi=5Aqhw`*II2F8q6q-U*MolboJ)T4~ zr>e%FV~>nM^Mjc?Uz==iKv2{V15A*e|N3Btq_fdGRP-*G1qIuXxQNWlVjIlpgya~h_hrf`jfmgL;IbJvsf-Nu^H(wp(AyZZ|_abDgR z&n=wXJsh9&SUEewy4xAR5O&YB_1*t@{Tu-p$18Q^16Hl+0om)dc@EaGb5uB)W}$on z0tyKH^Ghn!`|R7J?^af8utmRDu#d@(yf3V=mbukSxd~)8@i{(Ee<&p^PZ@wL5@7wJ z#`VD)`AJWinVEO)Uhh5PJVA%7ulwmjUt1O5&4|vQkDFN!QubviQpbcAV9dATCj;qtf)AH`?spI+WL@DQf*IARIsc>; zlC^zNCk??GYBHDi8v z2q+f69bnN0ml(buT*rTsc^`4^9PgeI^r5zw=?eC;KBdmg#TOUI^`I(^MA_29E)#mL ziRH|(>>^M%Rn@Kr#q5~(%sk)Nitq54<-Z3O8=TaP=Otw??XHxpdr9dE*{M}(Doz^j5mdbVRE&LGUg;2V5 zhhaZ{8xl|0!EFS_HZWBW|Oxd0N2v*@R#r7UtYfM6L zDP~mNfv)Vq8Rj$7Rsr@cCfv1~nT ztlc{4FpHU447SqI$lm@7oLo3hPn$fZuLa$sp%5RzEvkTf21bg+W-3Ip-o4A=P^1y9 zYr_o@qqM5hcwvY){r19QsXxEnkft0SU78S@`W9itF3JXT9{a}s>{ph|$=;)3#$eqo zmsg`xP@56R+3GIDpa1R-LPXZJF}+&p#}(Y_GqEFa40^ZOx;$7F>-n%;OQJ1;fz zwQRcO(3Iz!XZ1aip&OxR56~mMk0dU&nCXydjxRPlZO#>8i)w2hyW=q)Q%#gh(mT8> zqn=K^@QRx8kn9CivDV3w-oY(PW>=CljN@RT&A^ud+nxYn$y(FjWAVnQ zcM@g!-YkfpE#4_R%k2J0m7)nlu$FB&*DQ$ z%4lcO72ItBfq?Ju@t@st2*=&k=)qzW1*~eXR$y+js+)`R+W1Hk&hKY>bcN-dv^eULD(opL8a1`5($BaLsFdZmOF>H@xgJ z^Ldv1RMx-5R6T5CXT_HxU=Q&m`>{nx7=@W^ms^jNS&jRm?<$9Bfo|H@uj5Zn^-Pm= zvL6p7;XPrmOM6w}Wl9|=)i8S(i3@>gr<(Cn-TIR#b2 z&WKO{^YPj`)4DeS0VjD%O2h02iR_wiOF5Z4i>P;NnK@<+4}&jWGpl^=`1C2Y{CL$` zh)^j!*U|z{u1NrAK-#p&IbyzE4x)7HY>6ysS) zR=NX=Ib-}FEx~<5_v*R!nHxo_D2!s3-+qrQCxHJjb zF^1c0T!h(@Z?5_st#JJ6okFuyo+l+w?gn1qxmkYkLjTvnhTwy5-;#b^YKicDhH}#G zx8B;?Euo_lnHhC1gJz4vvQI3 zLTQgNs_G3KPrFWAs@Fn40R%QlhZ=fvv5rg~Q=-6*aQ5vO&SY@fFZG zyPakyc@!zPQRVNg+WBBoX)))zB#lCSM0Xm)lPz>@h3sqJM~{9qFHN_U4A)d~ZLbY1 zbA+IN&&+=v$yCVuDD1GKt`bp`rJ5#E(-F-LO z0u*1qxt1ciXP)~-hfpJ7+>r4#i>#!8>%teE#~#53K{d47PZ(|?XESP*00qcK2GF$=ZtO+qloVs zybd?#f@NP1FTE~-gv4;yAV$9c&tE$|O&(}A;5A$3d3tMX{wdwHl_b<@SXFlx+HL7yDc3ZsMZ+{~o zAV4cerFuTyHwz=@e|mB}RAOdUMr)E5-j{iv#?AxU)jaAboF*mDhQ=G}~nc zg-Nt+rie*%w-iC+Qk;ud#{Dmt4XEnhD<%IdX5Y{5SK^7sFbQ9~b^ofSgzIc8_)zYI9a-6_ z+Yhv?QcmQ-d;t+8bmsm0(Gs=$_WhS$rM!PXxw677$6ZtLtWTaZk=tkxjkeob=$)FH z!pxTSNK>dnDnu(T)lGa}V za0R?H%V`7CQWjZcR0U5>N(xh*o|%!OfZ!6`tUMcoaGyV0cq|V(|H|@)Hcti<3(u9! zoxOE=u*eO0{5Duw-9V?mIx{-DJdExl;{G$JPnkS ztn7J9s%Km!ezP$O8cASTuDNPyetv$oUCHsOsdUuT3$R^f`$!YGpO7Q1RTUX{lv!SDNH$kUI~g(eiJGxlJx6Gj zxH}SNOwa2^OnpY5vQYm)zi6nDwL@zE91fP!r=@22j-Z%m{?hPjG?4Dlrm; z;eJVt+z&%2%Uj`ZKKL_>`B3mpP#os{XE(Cx_+f2N<+6c@>OD2F91cUpj@TOEobM0_M6bk@lBN7vUk2ym(rcs6cz{P8{ zAvrxVr?nt>;yM!1bHT)<38gye8o%b)okuH+?0VAUIdz&?uh9yTp+8Y;tzr;XAQnC4 zG$_53v$9sZd7U$wPHY2X6>UK^K0Xcr(Qmn^3TlVQ1i_A7?P1-OUbp=X+`C&M*RNe0 zpy|`akBGZ$x4Pz}UB8~M6w8|ZIR1-1Vmjn9MX?FecKKX?=Hg$6_rSP6F5?CwLfgaB zlUEbo3?}E&MnptpA@Z$iy}&Ba($P@>Rw^wm&2AOW=`1@|d$@{>=hBn+ z?$6V7uKf*;=uJa|Opx!!Y}-fv&(f@{@`$k7Bdq5H(+kb0=xDUNZ*wT*sZJ!veX8yZ z8M8Vc4*q-~F& z;+3xsI6eTtrL3kVPa{@54y8xJB|)4gB)%S+9?p+T;4umJ=_JVZ7P)6odLf=#p%839 zje#JS^6rfrNHQt@U8;h=r`uiL7h_J3%~fX*ntG;@@Q$$c$-A7ML90lW%&R6Sr;}0- zrAP)D`faa+MccH!Ng8$%DW9$HL$@Vhq0$?EjX3UxR>ziNq2C-Zg$EB_`cQa#gN5vl z`<7rxrkKaa&6i7~qoU;f=eyHz@s_zvOiY%P`5`(-rft8Zh`LhArONR1TAZWa({?0m(@K$e%6u58{JNH<)$@ODrXG1UGu|sJ3Dx( z{5x7p50Gf<`)~Csl)0-vL|kcM8WzjZuH0;qPPw|TMpNUb#2xsoKI>v4ui4JVhAVQ@cyI6b%=G+FnVoumbhjLj^U_cWLwmH; z&Y7{ScZp1d`c_0sZd`)XS%~{=J>6z~BF4f(s1A?)@S)Oily%j&Getz5KL=wh>NXcy zQc{xQ5tQ)ZgMjZ2K3e)f@e7>?i_1xcp9e~n5~@J-?P09K?2~BBX||%TA*9B zzO1`>=0X&Rj>LYF8z9cRT64iZKYDxpDXpMwq&^5_oVrvz#_S&JySr5$F&!x{K8G9q z05K4?1pF^q#5u}t*lBRS44AcsGjn`TngkU9#i^-RI@(dx{L=^9%S-&Y_0B5OIv*$9 zy{?$l)O(!4K|#>FuF$dLPH?I%JhM_nzNomw6)_iKH#Oo3yQ2U()oNE9t6D01zzpE& z933cv1;5jQ$S4!nb0EGhHW#}AgHkz>Htx*g3r<+oTlmp`7{ObwG57@)_b4h=)J4|1 z{DM|@N&UfN(^!@?lS|dN1@+i?_~+f#(!}qszOuHp4cNyeZm@O{{$x;X`U@1=$}!o@ z04vV%|BV&@z#V`bw(j^10ne8JI(uZgA^*B?HlHwz<4`en6N;K__ zkboao#;OGqTD`ooIR3`0{{i`cG$g$~S^Mx)X=l82cVWt2*3QF6Jy=91U1^4+j>Lqd` z*ITH}CLL^T=csf8Pmew8W$uU55?T#S`K|!$3)~sDi?6uZkt*g^`Ft2&SfMJd=2XS~ zbaviy`7m<^=p0z2r`}*PS9GrVg;-LSHKbenCGgUK^+w{;wbPRxG#cI2wUV0=Kq~>m z13n#ZvNE%7V;To&!}W%;=0U3h0NuU4z3|$JrB&G7ebEg^;bFl~TB4Piwbp}xQiA+N z*lkY5COETGhA8->AGP;HnwGqN`O_G7261=A=2c*fkK@>1ajawgSEkQ~rp&>_JM`sr z0a`^F?^Schtip~iZ0@D}i{}alN!g+HXQ%^92Yh9}uK)f*X?e!Tc7h0fT;E=HTr z^XFMn;l6(Tnl9x#J}@AC-E2A2(&O^Em&rV)wR`N5MOhv8A_m zcHT%spfMQz7K1#`5T{r+b<{3_`th&6KF4>qTxCM)#{8^1!u|*Dz1oWE54AZzsjH}T z_NmLfW9uLwAOK!ZzPf+}`QFpNER1X1FQ?RQv~!8GO!C#hRt!OY zF7B~(^|ttp;LwkKk^!of^q6F%mds-h`Ja*(jaZ(dR=d+Aq$DK)AG()}w_6rqyS-0_ zJR`sx@b%-}iHOq@wsh#!2o1BW0Ewk-+~QoIdcd_fE^ecvZpR)_)o6Vs^1pbMnz5ZtE%ke4%6-QVhQC97ez#EZb5&tP zT_QX}EPlLUTIB13?r|F8SSHu`nl^A9aujMmyJ-KcxM(exaU!iqA%E^tGWwHXkS+dv zx_&bneL6ZIUCHD2%fcK#67*dTf3n+fx-wigAIG8f0w=kHu>u?!&1<($2X#*uaW;)Y zL^%Fls6IV8T*kht4hDu0`IaM{$ud@f!GCL{!T~OT#!&h;&MKRPy)Ds~t2f^U$XSk& zzT#o4gvHaTa*n!9BVjAD89&~VDj#3La$uO(g7@#))&qx;7vtdIU}QX}{)4|zk-v+g zN?+kS9gS*RTib@u_9aoGeQza%!}6Z+@Ik;APdmhK_5r%aL4FMFLqV7e549sIk_H}j zHJ%i4W$)eb-c0liI?{l8gNn4`=T8kuCi0@>Xl^;FV!vlOECHh>`Uu&=$3i7;1f&9; zSJs!0UsIWq32zVp2VKm?M11>tm$`qi(11nP%y&h&5T4tzW55o}ifW}(h;83V-P_-s z?|4m7`r1$Fa3jrv4`1c@({<}#0?GO8^D)55DG zvb<&&*KoKh(W&+IpjUw*Ot%Z20GDQFhU*p?f-EB#2OR#$5`@4*5R})iaNVp$ zJyY3?Z+F*!L2_TRDrJYQ^3 zmNSi`?Z5(SjHyjY%T%)QRipdK#>1nw#haD;>9T)NP!L}XI$8jD?c296#%jF<>6Jn3 zXyiRdcQIX$Nf(5=$d`3TCx<{T_f!}UOJPc8`BV?W=*RcW$PB-YHUXP<#@F1H|6F_} zeReX-Q~KcUOUa0ogoHU9EAAvI0dT;Spgt3dD{6OzWq1{vKVR* zhuC{EWE!;dpDg)wn%Vc~O)V~R)J#1D zxFxcfZPfBI8JttZBabqm-H`B@Yfo!N<$AzNH8bU>dA|HP?K^9>2xlR0F*F5nrzfXw z;U0*cMkFg7Pi2FI97k^CzPZ*B&&5{v9Fwg~6*;%Ea+`r6+NxM9H>w2{rtJHWgk^(M zJMYE8)-xlPtlV6g?S8GU6p_Hy>Um2`OTO1P-hTEzN)~F!NJf@zpBXaT<7%b+&qx!M z@ZT5QkM@4U(<5!o@wEOWx1%YK1QMHQoyNXd%x9=s=HvuimXrF#s=@#bX#)to0_a@$ zVz zm{f~;HIvvkmNu8E{q}&mpJg)T&EoYrDa9qA9z|eOm6R3%Q%WaUkQ^;*S?CzM3#h^C zt+cydvpTw(6F2X<+xDav6>?s651`u_3w;3xNsZJ-D+`F^lD1tR<-&(954d0d#^?p` zWnG16bArm$>+_odunmd#41(5MVyRWieYX}69?QBo+e*q`9g>0kuy{Uaak%U6X*nAi zf!E#9R==lP&QwcR!XM8^E4lCAzYpwAT-?wuJlE|z5yJ-&kViJK*$)=dP*U3T2nNgg zB+c^z7Iv)M=?$I>2n-CIbx!0l*OY(ptLuZRjkd+PbC$ouvF}2@x9 zNgqs{p5#8)(!5BJe&UYKXV{pp$&|-x@x18xXt=s>3&nuwoRR3!# z>{Ms35#}u|Emcbu{anbM3Z_z@B|qx}uICDanpxfMc&si^7~={~J<6XC3y6qRHJqLp z4Zjyrh@uM%4+r^B9{dC_$z*ANpSAHiz$Zlkg~->+&B@I*Dm>lx14(#zceM?WJg!-T zxv}YU*A#(eKKiay0PGORxRHfY#A2w`04^IxHL^nL`^?O;ruzeWW<(b+PQOG)(gf3i zN}@h^M8s(MV>b{H&!0aJ!s^{6 zK>-0kx58Dfl8}&)k|tVGsqX`&1&6~8{6)|D0gZ$d00aldv;(|Jb91F?;!Q|M9J}WE z%|T$}5d@U)H8CW}AFUwe`I0B;Hg{E*O*Prwb0YBUP@eyp^FSCDxGxfk1QIr#`YhPE z(8YP+KanAhzp^f$Nv6L+#AmX|#;7VPdI3#_@7A^J*H?j9WDl6-Eup9D>pw^XPxj}5 zG}JO%4#HO`9%w&NG=iu>%>i%#fu|>c#pnUcrWJ9z$2sA@Yl6QdQHNZUA@RX)+!baX zvf^sGkfwW#xy@((l08Gz<$QkCvp&{4tR!4|#W%K>Qm%?PkNcewjUSW+8!1{R`WB;TwQ1XrSmd)zs7y+U<#?{#f0G0=cSzp&?HoeE;H1AMy3| zjS#Th9k$D$#L1i~)O6oZ+Jpn{GdD=FX+4Ur#i-l}%mSF)04b`bAEG#6y`Vcg8T037o@7k}OD2L~f1D(VHi0`mnZ>C7;&osmrm+(tlceyvMN8l4ev&}Nxd zXQ}f0%>|VtKw%^G{{iJ7k|f8(FiG45MXxJgsX|J$H^+U~EcEf0a3If!bGZXn0?75m zuV24FWvhARQu8W>x@1fM8Yt%35Ih>hCF7rG7S1J5tPo8fD(LCy>DMwV1XNNXCK%w5 zh6qc!S%I9?Usrdxhs+d2;et(0)6HSbFi8H#a5(-CrkQ=w&IbvHe&OkrVxYMIvCNV= zvKbFBw#K3pP)y)Uqn_7iE8kqZb)8m7(KI$K?KX&Zs!;FoT5sx!E|S-vDiJYyTa;Xr zLvsB);l@M!neusNd6^W238{ut0Bk@ZV;^Kwv%FDZDOWEcfev~KCRDnbFcEla^4Lx+ zGWe)M|1=d35(_xF6{q}z*pH$T=Q5d)>Zziy2(>D4??6&6@*Yx6e-;BPn_@YKHKJIs9f|#aUe;#RvUOAQ7C4g5B0%jvCpok&Vo0t7O!@QkXPxBnix)2* z7$wD4C!|IdP5!lQ3Ms9_ep!;A&I48c3@RK?28UO{X#<{T04N7IvIwDC;2bI+S8m=s zo9k;jD?Lt7qzVLr=c`w*NF~?L#p-qc1B=in7|N_RXAr$XG38_J%|}*=&WtRsQcLFX zea|Rk%^pou8R>(d$WG-RH1I*Ipk=b*3D>CY%ZAbU8mgFs>+|AbXf;FbG(|MtLl%xx(jA#&X; zZU`l$osp4}&`N}#KPE#CIyShC)GY>#vp@<94Ilr!C)e>po%f_<3}bC z_1oVdy}iBV;yc;3!l<;m@6bEC#{wCm@~!@@=;GD;t8OU{lk+ZzK^KRD_8aXKxqB~1XNABO z47S>h?Yt)_oYdFXgN(VYyE`En_=GSZUBK`T_xDwk1aRrTt1*^T+sB8yW(@)UK&I{` zC>sHi^3Gyku1b;sU}iD^PHIzXYXLHYy|6M%hNwefmiU__BM1qvb#v>xvTmTH&^iIc zN=4PP+CYC4otP{50CFGsf*VK>>Kk=Iu|$^cZAi$ce1NEz#=zp8ot-)Cdy7<4?mwvp z$`L43fb{-4DJhyY!+$5~DKmWR>>ad-Ly%E1k`P~~dx|(IQG!mrBp`(L0ktls8lV?t z0f=*UfYIU*5nfX63uNs`&o$JWXqgky1M>=i6rg1BzNXD;sISirlnL4GY;7%L_x8Mc zq0s6U4EGHoOHZ)m&<3F5rI&s&u66}`%D)LB;|ZlYYPRw0SQFqHK z@6EwgUC^W;4#U^Hm?H6DI85AGk*IpwYiQ!!G#!NSooXUFGKXho3a*N}&W65yOI%7_ z1Yq3_ED!KC7ICv$uin1CSWxMGu+Z#OX3GsUuKT__1yfW09dR7N9g^IR88s~N?x(6f8@J7H1fZ+5%EwX!EumYzO1R8lan+3R>-cKE^Ze;JOc`V zI)EdBqEiC9rffJCh?hXu*Nuy20QGd|`u!aJ+oCVb0Yw3o?t7LZARjIy*K``D0cgbw z%H;=L_6VOHe0*qVqqH=xuCC)6jljlO^_tvqlAzwf&bxbh-MOHh1RWhnkkYXAOQ<*G zz_c!%9JeyM3)D#~ATBjsqF}2JNe1l>^?)esj%n5E7KvL})McN5_J9IVVFN;@LRYGo z5-?rRQGk?v9Zqd5uI8cM0*=Fhban;^am_|ILh~lSvcaNnD?1MsQd&atIg@>MqaIkI zP~FrbJhVLypf`qV=||H6sI-6bSo|gIIC6m{Um=p3C3&P``6WSi45Xy3&G`;1PrypW zcHVHUw{M-#wd12B&DamFhne0#8MMm7DUaW0-4dyfP7XK*rAHw@AftwJH1XI@T9c0^>doU#7WzLRpTn4WT`*jP0Dd#HEswR*}z^~diq{q|aC+Yl3eZmP$QO+h}O&(Kwn*_GbclB%OSjkvD%asL+`;+`!8E&Vu^ z3+R2>D=+s?5n1~v;+(&*GaGwM77FUY-s_EOIt3R$-K(p3K%x-hWj*^-r(kex*sc80 zTOLYIZAp(M^0U^I9X52a>G7PNnN9m)1P<$Y`gZW-I73ZoIJ8KEUg+sJOKYPmR=W%z z+n99*CKy|Sq*FJ^X%s|YMgs*y8ixMATSP;!f<2LPG;J89XGm@?n?2tZ`POjhOFx+& z$=`PzIbWTcT+@Zcn$!qG=*A#~=~XDFu4K|rmq&qZ8C7q1^jb{R^L~}kW|qetXWzY7 zSd~lp1Zh-7zaZvl2)9*lX#y=`%Dk!w;huQjh2Zq|cVVqcXI(=?iSw&ih36)%SEz~~ z2(aEQdLm*W=6|s9iZHi-`*1ff-|KC#pP0|qEq*F_7)y@usi9n zbidc{S{eVh2A@dm=uI9!ofF#Rlc4lJ{ko}*)d-|{1z&ZC?fjj54UxE;2Y^Ap1GAdV_3D+^;|#s{D&ICX`bk}MJ{ z+jtp)e5$#+x&m)-y~ON#5%h#khF~h{W0~ZRvAxDWW7n)11r&|PWEeUZn$FIGpa1@; zv}*k)QXftcR%W*SwZI8QrQuKYTgJ9x-Wx}t)O5xYKu;>KNzDxkirf==j+Vw^DcN5s@T1cKmrC|=ezs3fIU-wPz|b`B_;-|avV)aPX3Yyy|zRd4+e`BwAx+h z%~VoSYB%KS&(s0^lGNd$2ozM=^tT1?eKmtfK{o_z9O)22 zG$B*wcyU}wKz0KYD>J7!*lN(cA%+ulYG#`=7Xt5yS$4hiAMLt-_MVy9mHO{W=-<0L ca7uXIF1hFerX>OVCyR4Ra%#|GS@WR(1AnNT3;+NC diff --git a/docs/sequence-diagrams/puml/whitelist-registrar.png b/docs/sequence-diagrams/puml/whitelist-registrar.png index deea116d8c43c5f6c27cc7fd5d16aed72d8df0f5..2049500dfeb61a11f864802ac70a38350b1996fb 100644 GIT binary patch literal 16674 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 From 541a8a1452ada20cd7f4731ad6cdfe5c59897f85 Mon Sep 17 00:00:00 2001 From: David Hernando Date: Thu, 30 May 2024 12:21:42 +0200 Subject: [PATCH 015/172] test gh action --- docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.puml | 2 ++ docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml | 1 + 2 files changed, 3 insertions(+) diff --git a/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.puml b/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.puml index bc812fb..4be2286 100644 --- a/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.puml +++ b/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.puml @@ -38,4 +38,6 @@ Registrar -> d3 deactivate Registrar deactivate d3 +== == + @enduml diff --git a/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml b/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml index d94dbec..b625709 100644 --- a/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml +++ b/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml @@ -32,4 +32,5 @@ Registrar -> d3 deactivate Registrar deactivate d3 +== == @enduml From b16666532ebe235a402a9a92720482d0b3a05001 Mon Sep 17 00:00:00 2001 From: davidatwhiletrue Date: Thu, 30 May 2024 10:22:15 +0000 Subject: [PATCH 016/172] Render PlantUML files --- .../puml/d3-marketplace-buy-cspr-token.png | Bin 48083 -> 48702 bytes .../puml/d3-marketplace-buy-fiat.png | Bin 35598 -> 36037 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.png b/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.png index 9464d4bbdbec6a84a7ac09af40761610bd487153..4d042c205047dc397666d54c7ccfab36b4886336 100644 GIT binary patch delta 23923 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%0Ak5C7_V9{F0EVEXuFj?gj9-xu(m_bi;(x#f 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 delta 23257 zcmbWfcRZH;8$PajP*TXsh>*w(A-jP#Nf}vLkr}cwu1aN7ZX>%$Hrbnm%*ft*?~y%! z=Y1QE=lOhp-`~$4&+~d7xBI%T^ZkCG=W!h8abEfB`|FqXzahuVIJh4R3+pA;z}8zj zfqgfVl#=!#);CxV)jZEsDZmfa+!Ppse}sChoVT5f3@?3<;d8%Gae94zJ=wA`#Hu7* zws3_v$lkR&AuN{aohZRcYD@98;bo$@#n+B3hqwl+goZ4O32(e)N(`zx^P(F&x_2Y- z=>eL%XWZo~?WywJD8DRdFG&f~Fc-t8;*Rh#=h!@FE96X$ovfoS*iK^au?x@5VeUMHWKa1&~V+j%1N3eZvu+aOs zHpnqgZk0;6zZeN$kdO6or8kW>WWI$>8g~%qV#LXNajD1SOPJqBNlbY?CUTZIn0g_M za1jZJj_jYPwqz==YV8#0uHlgmY5iGUT_qqiU2Uymp^{OZ{CrSdMn)!(&+t;nhfXBn zCF2d>bB1kCie4X4=QsLdQZD_(O6R1Dz|AVBnc2^=(*gP^xC>%-R|kTQHZw)N-`^Xy zVBTroEV40Q-y|2N5MCs7K&DDvLsFdWsExL^_O)x*?%ng@ozWi4`L^nk`o3tvnU$H^ zJRv=OF{zYhyf)l%-Pt0nC1U5#5J_>jqc)0)io?~x$czK6L04`o<=TtYgrt0W_L0YS zeRz0Rf?Zu*E32wHvdv?8FOWFw-JVmYIKNK%s{aksh@{NxVqgeHwZrHrUx!fLc z!>_LH&UjpzW?Z6^ZC~Bv1)nr$Cnu*eau-)u6be;hz{JC2wmj3jvAU2mSHViosY<*veq>vzvO*uBP0Wo(g6F89|jsDErkYAChRp(@7t*oppqE(276HY_NjYU@tuCh^YRkomRt8D8&*^$Kp~lI}9A5y{HRnw_1Ej*jkLskY=ZY}4u-sr*V~ zxiUA%aK*!$pg;ddl4dFG=8R*g{c7~1_Jb(9))XD->({T}y7k?!|9MPIOo)h0$a#~m zbzNuG9i@_biyRY`v+CN$o*kXW7w2+xrXUifu~<+so1}@}Y;fKV3PR!`>C1{*P%nDD zF>*z$4W5OWorQ%3zLuk4-E>@1jchTKzvFR{th5LtZN;S6>Ief7rI>v#zC=(KXIQ#& zu2s^RWn;79>b#YqKz8>dWELYNO4(0FGfn#A;*XB}xsJ_KZ^xvAclOQmk#Fu)$lClU zF)eLqXlQ{(30`4xn?0|RXLQ_I#{ zD_fE@C2Yo<;!E8q%qCj6vO*b=8@?Yued2pmH{imWa2B~^GSgEyFfag1;_{Om(axc0 ziBHmKZjFnJBM@8vp}=p>(ixIM0n8T?}S zD=v=0?pVTxD|nRbbgyzr2K}96gU>zkIzBuxVPJB4h?vYgEz@`4^6=hK`(yhXQ7N{`&Q6kvR?ljj-l7{BV`3XIDIFRAgl6hFW=as;SRDcvfrQZMWo%S$s_!0hy`B zSouefMq&F&oG=}a�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 diff --git a/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.png b/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.png index 38a72b2a384e3572c7651e65225a12bb4a300777..38703a8fa24f5d24338bab030d2967af60f00835 100644 GIT binary patch delta 13167 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 delta 12742 zcmbt*cRbba|M$_-AT4EtqLLIvMubYJRFaT&B!z6@aE|fTB$SYq6|%>%*Et-c?7io) z_a4Ww&N=sWXnww*@9)0v$M2s!yuHVDy{^~m^&HpL_kb-Qe7Af&vithZEif32;(LJ8 z^Y|s2Bc2-Ukf-w%#$zw`Mf%3vJC=C;s?70O*By4}hZmPquNC`;r!D{mPF5@D5Lvy(p-#Z z)5Y~Zymh{8nR3r9_gqyf%a^w?dsKIMWa$Mz6qC)nSCyd%#Te>OeSfD`d4k&+F3-#P zV0%-DYA&aG*?G_KZP z6;^GQ)b{1;rH{7nF3U;Rlm_{-8ALs~q0Vt(s_Ur;CyFC$VUn=p3(u#>*OyK`2*pv< zZ?T%*>~?}}wjsF;Dbn8Hwv5zt+vKMKdZ6(r6M=Rx6y|R(C*)C7t;g^ z(#mqY!ZnlUo}*xwyF@~>UtHo*-E}tF_&RI)JB$5c?%6I|{YZ8To_FqjJFHterGCju zHQIRYaSeIPD8gVn4_YT?B+X&V6}7Fs%F5ma8q82-8b9#pADoImK4XZO$;GS%k)))T@cN;_Gb3sW zAr4DWutdVZW0Gjd(Luw=N=iP@KH7OP*f$0E^3WNWUzw6Z(iX|Vhj1b}f>_67e@t=k zjds!&$o$=9!r+;p1HI<`q{K_Ut$7qfRs%Z8kEiF0_*H4LuZN(XGv3{0E;>hUDVw-j z(7W{=C;$3$Mko2fSZ>w6PcY|$GiL9x?A!i7AE{2kPLt$j!k`PwSHjEo;54`Q9zc$l zD~p~i==-*&VR;t4^$Puo-(QmO_UezI8*ccXZPmu&VzJF>x%~G-waaHJbFD7$v1RUf ze3a&x&QGglaZkz8M@&8;;$L!)b@)r6(ROul%Rbn(6_xh--!w1 zvt)Pt&S5PYCy~j+j;}Tc)UK@DG|`gSIf2F{5zlI5-ky5LM8k#H$=jdCi8%jy>M$bu z*kg(dTaoLGT5}(XIj^rx3rVTB+lU}y5AJHx7HWVeq6Y&Jn+))ltCdRCnoMy+42zWRLeSwoCs1kKhRM{jVuDJr1fS@e*R|jEsz0 z5Qz{O8F@x-FPqrn3tIL%g(g}>F`H@4`}dy@R|Op8zT0ItlV{Uy?Uw=#mU%j?F0Ra1 z@-sk3Me8s&W~8$ivLd^%v2e3^^IMDiGA5Vjz8x$f8^YbY@A)%yW}0+@Ni5|QzoloD za>Pyxns#Nc&ER^HET1+L7H4{J2?@7PE-OaJj^UoZk%$=B7`+eCZ|^?`-|T{_m0UCK z$#-Zjxg*kj(GFTN&eJZhuI|pUj81V_p6zQ%)Cde^YAN^T78DS0p9%^JGU?1@?$pRK zrC&R1Nl9j-+m8uY$dw$^4|Rx2Dr`#{{@zCaW+fRhgLZb9{=gJ}^GNBByoE7l-+=Mqp;kF#c32REv;Hp%dMp5;hQ zWOOucu|a-3x}#-{k#V=uZNt_i6UXpOo#M9>Nf^F!=c-3lqVKZlQe=*3SuIVf>1vpa z>bDa-=93BI&4NivO0*){fh%9fS=^_7L{Z#v-L^7~4pEyo-hQ(q%Bv;G2ET=j$)YQ~UGRLD7a!sI4;f1w{ z<{TzW*m;hYX_7T&BuO(TRnCLmM;Rxa{H*bmZnTy@25Xvg*UvT-Q{=8|kEM)CT-?EN z;}GUe&#}!Gg=kLhOKnJpDn9Xm#8N~qE{-)$w4y~Mg(EJS;WeF`D&hwCH8Ll=axCqL z(`*+FK02Zt9myaAps!N5l8BwuxG6}HtfKD*<3XBwE8`uA-Mnb*^P<gudg4!Kppd{w_r0C1T$GY zA)wpR=aS`cQ<9e5P=(Ka@y;RZO6wi6bR!f(Z^Bs#8CYOCW- ziR6}}l@oXgkWMyShsN5BL>pe4O z0Oj_=gg#s{`rpz5ZdkSilb$pi`oR*4V&@bd`dbqw81>1M~k2lU9|GxwH{}R8U z|1E(31HV-h)zYH0FbE!=50U8PE=k8vTaMnv;)JxZ;joWiHz>!(h~wgu@|HRx__ED(khNJ;IJW3C=J>l=*DY7p|12wTQ}bn+PYNEX ztX@0Or(xe}e<2mT&CvB79x&-3cXxO748vGw3}TAqqQO1yQ+HT|3@<(^aEg%gfW}RK z;h!OKx;u*sfZ7>`%B@LSpo4_^`DHySd|9XT;K74KhYme?`V?SXw?!!%XcW8c;MMb1 zL!hS+yKO>qgDd$kw@pTErmdadvx;OI)ISE@$ftj-2rgy+{Ri8j2J5xfve0G`q{WZ> zL-8C-6Rk6#s7i`!g2nwleF_3K`|aI9BIrX}Hrdj)yEXjY{ym!6Re$y>KUH_0U?vt-aGGD;CXIoX*1pR%$P&cKHGYtCD)@H zc}}$rw6UL9T3ud#AyYYvSrF1o2ay7xn44yvo7}4HK(m({-@}5G*h#I$KbKm1VRdC; zgis8ULKD!4XV0GTD1#0Yff#u?dl`gWYJIkNZlKg!xdw9viCY;CTy-BdTw9u|tf*L&zH_6>m-i4}Tgtrm z3g9i=xBb6}%OS=3CR28AkZ4=wmrj2$Du_y{GLQ?yompnB4Cl&~C5+lrpN`Z7cY?(N z9FTLE;7D3E=|~@&Y)?Cbj*gDjhy!`01OgvXV+;NzOtccGIz`ew-VE*Lu$#O_ zFg;hwA+p3OCu%$UrDF8Wn>Qsjrxmz^Bvdx$_*ob2O616+G7so4>Y@JNK~uJcF6LPN zIS5Mtj?pB~2fC~LQcfA9_r4E+4L1N79P zNYXcgN=V#IX+L1SP%fI1CUgg1R)KwZrXk#Rv zt*@wyA_GVLluEhhQuK-Uor>QPvt;26Tc~scIp*^NipDd)g>=jRm8pY~s+&}QFs}1} z9fJRNIZ2@ys4Vo~-#rXH1oLIN@%M-2yf}gUS^vj7Pw;G_!Czzi&s*=q;gSHyi=7!X z_S|)`MI8I2i|qadz<%(}q&^sD)SAR5W(66*;rP!&MhQaBJM|g-H_%{1o2hnQ*+A@{ z59~?w_488*5(RAM!`RqZdwcuz8$yM-K11B!2-3j2Ny&!CJ2H%D>6kuxdWLzSOifLl z_p)iyPxyEyox8CK2^#2x`SoZ<@>E#e{jN|i+b++&$&q+hRwQPCR~eOokB3=bL?>0O3k|? zxwC=gn}fIqaBgZUtEUDtIm^1SHV>D1xs*3Wb4J4u)N{z?)t|xtll^R@*6>3J=<#@y zFaJQ%A1e6Qw14r3H%foR?%#y-e}ANOKKDn>|Eb`i9}@mQn96p07itu|e~;OT!L#)* zR@l7Ns3qYU0Lojtnd$2Laf~pR(BD*tP>|6Ir#6fUctOa&MPZM|on56+NBQxeFpriJ zwQc>~pnho2laod09|702KA+q%*L%pqa<*eL4sf4ikN)PBz6EjYH35R$TwD<tUzr5gzOC&r>E2 zxf#>CHuz)(MTn!Us%o9QHq)HB8W0?8a#_N7sC@p(rk~AW5}onsd6V!m|1*EtW(Q;v~;MCHj^R*gK>KO zE)vAmmMh$CwUm5pa@JEB@66y<3Im2ryXm9}Zp96Oj0dP!_YWaa*qSL_)^v|AxLm z52d0A)OkwfR^#&Yn!=e0-){HEEx4)&au~8$_xIIoezVH>T zh9tO^YM#=3+3`m%#PmIQSPNE0r+fV^s^}lhlTj#Ojx-?+y`|eVN&JV|si-?Q6S(Ed z`9Cbq0_P1Dv&gE8Ca}6$R$-RYh@G)rJ{0Jhs|7i zv`LUE@qd8apPqA%rWVjxfDj4_3Tk8+LO#L4!GVGD4{0?IkiNaP+idHl08N{&%om~K zR_U#M>iN+PnI;-VV!d%L2OD$u%!>Sw#mYjwyp=9vu=QdwRT_wEgEPIM%*PR17Zw)K z+5N7Ii&k8x7eUtqqy>xH3v)TJ0pSA0 zG`f&mxQ?(xAcQ^HW?}J9u5Ghz1D?Ylfj)WBGjLZkco9f}1=55Q?ZcA?ISY#aNW~k2 zKAv$tK-W8Q|Ht3%4gwcl1o|)6e_j4#NQW+Y0v`eY$mg~Ti~&Q;8h!|O4xM9GD>(U_ z6SyR>>#wlv=D@ASEYygv>;*o{@5{HrsskyE9gmA|XlzVNP2D*G9Q^Bist^s#Wd~Bi z0N9=)R-<)QRaF2rpX%$63=bb@p&^#N(@fd|+eiO{JVfo##)TybtPUx6WSW3A>pI2# z9Pmlj>z`iloK3d-r5`&ah+W=3K2N_{!SWvmC&4buUB9_GW-6H$S_Y$8Sy@rlw2*;- zSK@g91v*2Dt{h&Q7W*yqwG+dI3%>(daCsRZq)3mwrQ6|i51!04MD76#asWE8Me^IX zACUlWeOXs1g6j?m4!-k*7Q0`JndZdNgM!DmT%N@DeEz{c4(`Bx{rY6Kx6qy<)=RG= zu;s>~Q;^=TbroB82aF8{J9ZP4Ds|@$kZ|yWECZ(nKh`UMX?Q1v^UO3Hj~}19?&SQ_ z4r&$#IA6f+@Ba7TfvT{7S-x|5-_NmZD%;;TLVx7T-*^5TweBoU=p%tYCJUCGI-p)r zPzB(J_Mr7lmEE(xSVbd<} zG(Cx8I+@fxC3JVfSC}Ao8j-9MEbHUP&~{JSD{SWVam(X1Xs?)Rt-PUpS`IRBy%I#W zo_MDmk9X*M^L>pNy7S4}@_-hD#Kju>fVwo8SbIy~} z!n)g&3z@SK3i`DnCV9-qZn`sF712aX!CvGHsYy@Tr1!6 zwDfkT@+@mZBmf69!()-JcF?01N9TqE&Bi4w{rGX9g7~nrMZjnPevm!jR;xLd!&T*F zWiiU}zSEkGA6sc=w%b_8rFEHbS)FU z8n7cqX8Vc*g^ZR!MrQ&CCLW#Nz}8eFrVMsOw7~X5v$n~^$c{Dn3lUfUrAK2`GUC1h~dn*%x%xi#7371x&?nQ$AC5XHb zT5X4ST${QZEEYgyx+O2qDrES?m^j`H7?&DFlj2+_kABf#Hu1&{KWc5%6Xh4JZL3H+ ztY)%b3_a;uhYx~8&wfcwM zfENaaNrrmBp}pB!mQR9;GhJSVKIV{X1zZSd;EXUw$HjWNk{W-nM7$EfYYxZdzEC&H zqYu?7sUZq#SX&DqeE~04gUgr<4h~iYi?_y*C-tQ?QXYS=kC4NWmO29j_2bOVHoR2e zxWaAw-hiYYF7xCv%Oj|O?0kQJRIB+4WHCrs(!!7&*FTM!q2Y^T`D!x>m}j#PV%*Wh z0Ls$%whOlGn=H!AYDZ)TI|MD{#pu=^L?@WerA|%t$lp_OWHOg4xn%4ny8QfTUcW2v zDTR;($8m`ZCpGe-0c$tIkuu5Y?pnqld>341wZKF>V*oy06+3tq=h!i&>EhVj-0T8o7c;Ptto$*aU8%288nF!yxz8UnOAmYgfg!+TTF*8T1_k=$JNG{ zi6884Ny$K`-(B3Ld%pJ^ zQYX2%(oDNi?d_Kuqotx5B1I&ZA2r?)A!#&5RX1_Gm0GR$(6-e{Q4|tfy1X)&zPNZe z!?5{2Lyw)=Kw{RCNtfu9mplvJexX*x3?I*6G<_KAphmDgQ+}#QkMiMW$n064RRZggJiTkZQJ1Qjl!-_HB7WoGwO1cc?(C z4)f(BMLAVy7sqgFbAcQ^DOXiX-I5|C>?lArL|^A&t6E4m=vvmDm^_xn~WVd9`m~iAAN^440s(Fcnl3ixcC-k)uimI-U_7}5W0)3D(H2y6` z=LVeUq6MEZw!-vY)(9`=< z4t2bgpxI}<{|Glp3Np(X>aiwt7(q+JfivUI6D=mS6^6RTl;u*1;TlqDT*PPf7mHzw zvH;ndlprgP?z6n%sO;xM&SBjTI`c_R>Ud6s;0AoD>BYE`FI`f#pOeX%OSU7zq18sn znOz4rGZHbd)l|eE{v+w)j;F>0CoULHzzTyf(A~rSXTLBEHJkLZoLn?bqym0bYb|v+N8V?W4B6d};*MOS&v%T;Y-V@hBP=Y`;#3qarsl84 zX1=dKT;p>;jdDK06yB3#**aLR1QH&tuG8lY9E+YbeUFTTud(=K#cx>C^bzu!_v#Um zo!vcir4qF3!}v=xW+({RNtV&5SZq|9l+L-g+oUiAwo_QgLO^(F^3r+<>&cuPHu40H zy}5Z0Keh}z>mPWMKE}l1bY56Tg%5}1>gcG3*;MqZ2a_UG$MHoS5BAnLA2ZS_TV!NU zO#E)Uw&WkPvnp{PLFcc|%DfQlr}`uV?ojHuW2M>~j{cHwlGR;!%J&OtPy^oNu7TjYQ z$<(cvmp1KH@+@qPKOr>tQ6sx9ruTc~>KM;)4wT}E>%-0YWm0>c3K|~-x(Bqj#Q)y8 zJJ*{3Y|zow1k!OzmX?Y0ovpbJU>W53o*5VeC7P8m>CdOO8XXli-DXkO<~Zb&HCX(a zmCCT*>BX$NSylQb`kvE>tuZANROA;{?5*qzs;e(=q-U)J(TlG-Agy2?$<*w7Zq4%U zU2yI&wx7WXTqDpqt0u?+X{{u$dC>6(NpukDIo$C9OBla>F~YHbwDf`h)3>Yt3(m z$~+vj&W0U7waNQGx)Ky^TXA4%4Bx&%ovcYCFH8Agd^Ja);;+HzGT^nwv+{z z{ckV`HuaSLJm6}fIp`%KCaaR4=oa<1_=G}ucnHy=`f^YeC^t@G36yk}7^z)XJDf~!v1=(;{Y zB`Ia$hXT}wXDsde-}qq`SI52s_%vwB)*4BQ>-1uyC8Swp-IS+vMM+2J62@cONE4-{ zqa>aveiQ6PF6{dTAY-7N<~OfjeXtOc;$2;v!Mj=H8jEg?>nrkTY^s~%@_Z$46Q?KG zV2V*32wne543|Mqc&QhwXBsPKndT)V2z#HB&_d(4`|8FKhC$bB`BHci;1@XL0#Rm* z&y|otXHblE7E{)qe>!cJE=3yKYE3h4V5q|?G+tf@ebm{YLpLu<6Dg#F+qB{KbKe7n zr!pr+L_%xjN@=@H&nxqu4bmhye6R)wAQjChI0`Wv71^YaCnu^p3W#CCE1d1zxS7Lp#R(Yk2f+gnE(9$r`(U2@{i{4TbfvcwRd zo}T{YQPsD1-aQaR^3x8vm~`FbsO0)ou61At%CG|LQx1@8tke7#R)?!QU-zUZr}y`- zfKA0r_HbFCZ1I-57A&H(kRP;C*#W@uoOb>he)K?u$A`UB15b6|aw1RG({(57=&vmy zb#R!vE_+FiZYFa|`a@c&7V=?Wj4MUo4HdK2dp1^I=T<)zkG^|(Z8C^iP;V5PyC`{K zgz)ZQv_Dk%z!VU-&zCHt2>XP9`!XBC>edKyzA04;n4&>J5U;HJ>84P`od+AAtfW(R z(*q~bRybzTjX?V~rOSpufH{nyH1Iik4)Q21hcR8AdmW;;;9Yf~RAp@~x~5e3am@sm z+z0x+Lm0$tZ}~W#+(+Bc)?h>IOTcsgQxa~xFEKp4Kg^jOT3KvNtuxxEuGX%4Cbg8r zXIF)E_~ya{HzugMW;=6%gD+0RmwBSh)JDpPWgcHxVZs8*yb*;CC51Z<6jBUcEh`;p zg=+r`#i;DjZ$YiP_7Dke!5~-gU({gAUdIFyeJGS~12udd3)AL~wOH0%E~h_|I25a;Ka8|g;Qdwo3E#9L5xr@;`wVJ5r99tJ@( z{FZ!<67yCrh1aq=l&n?+o9m2}K>>rTyGtL1_7tQmZtm2x|Js2)ZFB^RJzbkqpvF;Z zyd$yePp%feu1hOzin<-J3bwh_8Q5-CA+?apeKGlv1BI+>Psv>>7`5Ox?P6qcalpH} z9sxn9LJ3~+I(;@M+oY5HQR?%{MmXx(u1&4~Q|epLIUYqi%=N3PCayxjp1Y7?Jt3S& zUY%%>mOG#T@4-_;WKI-BraJ$Eae5^ zuG65!`trLJUGB?s*ZaymbzilDZJsqr@WHb;1TXRo>wetP)z#0sE;_#&qxdH5ok$B} zuq;;eE}H^ewFTX?2$gYhP2!*SWX+6@*6RwJ;f)IRnJt5d>~sU_VmJZJ-N$ z-ig@1GfClc-xau&Ras|k@xyNxrr>gcoyE4+?R(&{WMXjwJg+`t#(5X-ht3_~PuL@J z=D=RiZKjY3H@!pVN7q`5T?aC$KGw|l{hH8n-}-D{X3qzvJG|#41oYgwDfzL%qNc16 zxM3D&9!zVL&W(EM<$?fpYL z_8v9pX8a)bnXnB!=j05X`X1Qo!zEXt{KSK-wZtIVwp_;L0Xk^~>Pw7F&4glHjS1C- z3yIY;m#`eh6cybB!{k3F!NO8!t<)SI&a4!5+ifk_nz}g)g9*tKUQx$-P6I*5AsPPV z(X~-xYP`hu?FYf(J;KU}U1F^}+vc5aN}+X<5NOSwTtoc%*y+NmCWnMH@iv#Kx_cXdAVo3u*{XYpV((6bEaO?^2Kq!4WF?=aL z&YGWkKhyVsR)(XZ_wL<$)NK?V7w55g`QbP3R)vtuE29w}K?eOgf$^=D;%~2}4 zT|&!oe2aJo_K9GyZJ_b{OO76x(-qwKHD!n(>gf4kIpYEK*Hor?RF`%W(~=PfH8Zat zGJ)XeVX4KYs4p|VUPE0k*nv0y!_pkVk) Date: Thu, 6 Jun 2024 14:12:44 +0200 Subject: [PATCH 017/172] added voucher verification on renewals added flows for multiple names purchases in same transaction. --- docs/sequence-diagrams/Buy a cspr name.md | 10 ++++- docs/sequence-diagrams/Resolution.md | 2 +- .../puml/offchain-multiple-purchase.png | Bin 0 -> 35900 bytes .../puml/offchain-multiple-purchase.puml | 35 +++++++++++++++ .../puml/offchain-renewal.png | Bin 26928 -> 32703 bytes .../puml/offchain-renewal.puml | 1 + .../puml/onchain-multiple-purchase.png | Bin 0 -> 50068 bytes .../puml/onchain-multiple-purchase.puml | 41 ++++++++++++++++++ .../puml/onchain-renewal.png | Bin 37391 -> 44594 bytes .../puml/onchain-renewal.puml | 1 + 10 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 docs/sequence-diagrams/puml/offchain-multiple-purchase.png create mode 100644 docs/sequence-diagrams/puml/offchain-multiple-purchase.puml create mode 100644 docs/sequence-diagrams/puml/onchain-multiple-purchase.png create mode 100644 docs/sequence-diagrams/puml/onchain-multiple-purchase.puml diff --git a/docs/sequence-diagrams/Buy a cspr name.md b/docs/sequence-diagrams/Buy a cspr name.md index 63820b6..1a73c76 100644 --- a/docs/sequence-diagrams/Buy a cspr name.md +++ b/docs/sequence-diagrams/Buy a cspr name.md @@ -7,7 +7,11 @@ ![](puml/offchain-purchase.png) [🔗](puml/offchain-purchase.puml) -NOTE: lightblue color indicates off-chain system +> As a user, I must be able to buy multiple *cspr name with a fiat currency in one transaction on D3 web application + +![](puml/offchain-multiple-purchase.png) +[🔗](puml/offchain-multiple-purchase.puml) + ## Buy with CSPR token @@ -16,3 +20,7 @@ NOTE: lightblue color indicates off-chain system ![](puml/onchain-purchase.png) [🔗](puml/onchain-purchase.puml) +> As a user, I must be able to buy multiple *cspr names with CSPR token in one transaction on D3 web application + +![](puml/onchain-multiple-purchase.png) +[🔗](puml/onchain-multiple-purchase.puml) diff --git a/docs/sequence-diagrams/Resolution.md b/docs/sequence-diagrams/Resolution.md index 7a230d9..4f1c893 100644 --- a/docs/sequence-diagrams/Resolution.md +++ b/docs/sequence-diagrams/Resolution.md @@ -35,7 +35,7 @@ The logic could be wrapped in a stored session call: # Reverse resolution -TBC. Let's decide if we want to include reverse resolution in the first iteration. Or we postpone it for a later version. +24-06-04: Decided to skip on-chain reverse resolution flows from first version of CSPR.name. ## Set reverse resolution diff --git a/docs/sequence-diagrams/puml/offchain-multiple-purchase.png b/docs/sequence-diagrams/puml/offchain-multiple-purchase.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8b3d2041951322b6a25a06cf8d5813aa730b31 GIT binary patch literal 35900 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 d3: Buy N *cspr names +activate d3 +d3 -> d3: Process fiat payment +d3 -> User +deactivate d3 + +d3 -> Registrar: register(PaymentVoucher, sig) +activate Registrar +Registrar -> Registrar: verify voucher + loop N times + Registrar -> Registry: mint(buyer, metadata) + activate Registry + Registry -> Registry: mint token + Registry -> "Events": Mint event + Registry -> Registrar + deactivate Registry + end loop +Registrar -> d3 +deactivate Registrar +deactivate d3 + +@enduml diff --git a/docs/sequence-diagrams/puml/offchain-renewal.png b/docs/sequence-diagrams/puml/offchain-renewal.png index 567711389eb9600be2dbfe721a79cf7f747b52da..58947d41ec825b234a06b525b37b517a9b6004fc 100644 GIT binary patch literal 32703 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 Registrar: renew(RenewalVoucher, sig) activate Registrar +Registrar -> Registrar: verify voucher Registrar -> Registry: set_token_metadata(new_metadata) activate Registry Registry -> Registry: update metadata diff --git a/docs/sequence-diagrams/puml/onchain-multiple-purchase.png b/docs/sequence-diagrams/puml/onchain-multiple-purchase.png new file mode 100644 index 0000000000000000000000000000000000000000..5fcac365e8a2e76ac4464c80329507401162b2f2 GIT binary patch literal 50068 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 z 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 UgGD-uAQ%PN{Ce4<{v0a)F91Pxu>b%7 literal 0 HcmV?d00001 diff --git a/docs/sequence-diagrams/puml/onchain-multiple-purchase.puml b/docs/sequence-diagrams/puml/onchain-multiple-purchase.puml new file mode 100644 index 0000000..9e4c1cd --- /dev/null +++ b/docs/sequence-diagrams/puml/onchain-multiple-purchase.puml @@ -0,0 +1,41 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor User +participant "d3.app" as d3 #lightblue +participant "Controller" +participant "Registrar" +participant "Registry" +participant "Resolver" +boundary "Events" + +== Buy multiple *cspr names with CSPR token == + +User -> d3: Buy N *cspr names with CSPR +activate d3 +d3 -> User: signed PaymentVoucher +deactivate d3 + +User -> Controller: buy(PaymentVoucher, sig) +activate Controller +Controller -> Controller: verify voucher +Controller -> Controller: Process CSPR payment +Controller -> "Events": Payment event +Controller -> Registrar: register(PaymentVoucher, sig) +activate Registrar +Registrar -> Registrar: verify voucher + loop N times + Registrar -> Registry: mint(buyer, metadata) + activate Registry + Registry -> Registry: mint token + Registry -> "Events": Mint event + Registry -> Registrar + deactivate Registry + end loop +Registrar -> Controller +deactivate Registrar +Controller -> User +deactivate Controller + +@enduml diff --git a/docs/sequence-diagrams/puml/onchain-renewal.png b/docs/sequence-diagrams/puml/onchain-renewal.png index e9a0c4cd5b2e1cee47d58445b96e17845d59ce48..6775f040035d0d4a2129f181059e82c14bf63c6e 100644 GIT binary patch literal 44594 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 literal 37391 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 ne_wkAz Controller: Process CSPR payment Controller -> "Events": Payment event Controller -> Registrar: renew(RenewalVoucher, sig) activate Registrar +Registrar -> Registrar: verify voucher Registrar -> Registry: set_token_metadata(new_metadata) activate Registry Registry -> Registry: update metadata From c4730afa77c12089bf916a75c4a23acdda71a614 Mon Sep 17 00:00:00 2001 From: David Hernando Date: Sat, 8 Jun 2024 09:00:28 +0200 Subject: [PATCH 018/172] modifications after gathering feedback from D3. --- docs/sequence-diagrams/Admin functions.md | 46 ++++++++++++---- docs/sequence-diagrams/Buy a cspr name.md | 1 - .../Secondary-sale market.md | 11 ++-- .../puml/admin-transfer-domain.puml | 28 ++++++++++ docs/sequence-diagrams/puml/burn-domain.png | Bin 21797 -> 28396 bytes docs/sequence-diagrams/puml/burn-domain.puml | 22 ++++---- .../puml/d3-marketplace-buy-cspr-token.png | Bin 48702 -> 62740 bytes .../puml/d3-marketplace-buy-cspr-token.puml | 49 ++++++++++-------- .../puml/d3-marketplace-buy-fiat.puml | 4 +- .../puml/d3-marketplace-list.png | Bin 23283 -> 33196 bytes .../puml/d3-marketplace-list.puml | 23 ++++---- docs/sequence-diagrams/puml/expire-domain.png | Bin 29603 -> 37080 bytes .../sequence-diagrams/puml/expire-domain.puml | 27 +++++----- .../puml/offchain-multiple-purchase.puml | 21 ++++++-- .../puml/offchain-purchase.png | Bin 28330 -> 61154 bytes .../puml/offchain-purchase.puml | 22 ++++++-- .../puml/offchain-renewal.png | Bin 32703 -> 56826 bytes .../puml/offchain-renewal.puml | 17 ++++-- .../puml/onchain-multiple-purchase.puml | 24 +++++++-- .../puml/onchain-purchase.png | Bin 41548 -> 82120 bytes .../puml/onchain-purchase.puml | 24 +++++++-- .../puml/onchain-renewal.png | Bin 44594 -> 78244 bytes .../puml/onchain-renewal.puml | 17 +++++- .../puml/set-grace-period.png | Bin 0 -> 14220 bytes .../puml/set-grace-period.puml | 16 ++++++ docs/sequence-diagrams/puml/set-resolver.puml | 4 +- .../puml/set-reverse-resolution.puml | 2 +- .../puml/set-transfer-filter.png | Bin 0 -> 18776 bytes .../puml/set-transfer-filter.puml | 18 +++++++ .../puml/transfer-domain.png | Bin 19701 -> 31541 bytes .../puml/transfer-domain.puml | 11 ++-- .../puml/transfer-from-domain.png | Bin 20750 -> 33607 bytes .../puml/transfer-from-domain.puml | 9 +++- .../puml/whitelist-controller.png | Bin 12380 -> 14127 bytes .../puml/whitelist-controller.puml | 4 +- 35 files changed, 290 insertions(+), 110 deletions(-) create mode 100644 docs/sequence-diagrams/puml/admin-transfer-domain.puml create mode 100644 docs/sequence-diagrams/puml/set-grace-period.png create mode 100644 docs/sequence-diagrams/puml/set-grace-period.puml create mode 100644 docs/sequence-diagrams/puml/set-transfer-filter.png create mode 100644 docs/sequence-diagrams/puml/set-transfer-filter.puml diff --git a/docs/sequence-diagrams/Admin functions.md b/docs/sequence-diagrams/Admin functions.md index 12a3404..7fae06f 100644 --- a/docs/sequence-diagrams/Admin functions.md +++ b/docs/sequence-diagrams/Admin functions.md @@ -4,7 +4,7 @@ ### Whitelist registrar contract -> As the Registry contract admin, I should be able to whitelist a Registrar contract, so that it can min new *cspr name +> As the Registry contract admin, I should be able to whitelist a Registrar contract, so that it can mint new *cspr name > tokens in the registry. > ![](puml/whitelist-registrar.png) @@ -12,29 +12,53 @@ _used also to delist a registrar_ +### Set transfer filter contract + +> As the Registry contract admin, I should be able to set a transfer filter contract, +> so that its `can_transfer` method is called before a transfer can be executed. + +![](puml/set-transfer-filter.png) +[🔗](puml/set-transfer-filter.puml) ## Registrar admin functions -### Expire a domain +### Whitelist a controller contract or admin address + +> As a Registrar admin, I should be able to whitelist a controller contract or admin account address, +> so that they can mint and renew cspr name tokens, and call admin contract methods. + +![](puml/whitelist-controller.png) +[🔗](puml/whitelist-controller.puml) + +### Set grace period time span + +> As a registrar admin, I should be able to set the duration of the grace period. + +![](puml/set-grace-period.png) +[🔗](puml/set-grace-period.puml) -> As the registrar contract, I should burn expired tokens upon request. +### Expire domains + +> As the registrar contract, I should burn expired tokens in batches upon request. ![](puml/expire-domain.png) [🔗](puml/expire-domain.puml) -### Burn a domain -> As a D3 admin, I should be able to burn a cspr name token. +### Transfer domains + +> As a D3 admin, I should be able to transfer a batch of cspr name tokens. + +![](puml/admin-transfer-domain.png) +[🔗](puml/admin-transfer-domain.puml) + +### Burn domains + +> As a D3 admin, I should be able to burn a batch of cspr name tokens. ![](puml/burn-domain.png) [🔗](puml/burn-domain.puml) -### Whitelist a controller contract - -> As a Registrar admin, I should be able to whitelist a controller contract, -> so that it can mint and renew cspr name tokens. -![](puml/whitelist-controller.png) -[🔗](puml/whitelist-controller.puml) _used also to delist a controller._ diff --git a/docs/sequence-diagrams/Buy a cspr name.md b/docs/sequence-diagrams/Buy a cspr name.md index 1a73c76..6ec56ca 100644 --- a/docs/sequence-diagrams/Buy a cspr name.md +++ b/docs/sequence-diagrams/Buy a cspr name.md @@ -12,7 +12,6 @@ ![](puml/offchain-multiple-purchase.png) [🔗](puml/offchain-multiple-purchase.puml) - ## Buy with CSPR token > As a user, I must be able to buy a *cspr name with CSPR token on D3 web application diff --git a/docs/sequence-diagrams/Secondary-sale market.md b/docs/sequence-diagrams/Secondary-sale market.md index 01e704e..d12b052 100644 --- a/docs/sequence-diagrams/Secondary-sale market.md +++ b/docs/sequence-diagrams/Secondary-sale market.md @@ -2,6 +2,8 @@ ## D3 Marketplace +_These flows are valid also for CSPR.market and other marketplaces._ + ### List a *cspr name in the D3 Marketplace > As a *cspr name owner, I should be able to list my token in the D3 marketplace @@ -9,16 +11,9 @@ ![](puml/d3-marketplace-list.png) [🔗](puml/d3-marketplace-list.puml) -### Buy a *cspr name from D3 Marketplace with fiat payment - -> As a user, I should be able to buy a *cspr name listed in the D3 marketplace with a fiat payment - -![](puml/d3-marketplace-buy-fiat.png) -[🔗](puml/d3-marketplace-buy-fiat.puml) - ### Buy a *cspr name from D3 Marketplace with CSPR token payment -> As a user, I should be able to buy a *cspr name listed in the D3 marketplace with a CSPR token payment +> As a user, I should be able to buy one or more *cspr name listed in the D3 marketplace with a CSPR token payment ![](puml/d3-marketplace-buy-cspr-token.png) [🔗](puml/d3-marketplace-buy-cspr-token.puml) diff --git a/docs/sequence-diagrams/puml/admin-transfer-domain.puml b/docs/sequence-diagrams/puml/admin-transfer-domain.puml new file mode 100644 index 0000000..ae0d07a --- /dev/null +++ b/docs/sequence-diagrams/puml/admin-transfer-domain.puml @@ -0,0 +1,28 @@ +@startuml +'https://plantuml.com/sequence-diagram + +'autonumber +actor "D3 admin" +participant "Registrar" +participant "Registry" +boundary "Events" + +== [Admin] Transfer a domain == + +"D3 admin" -> "Registrar": admin_transfer(new_owner, cspr_names[]) +activate Registrar +loop N times + Registrar -> Registry: transfer(new_oner, cspr_name_token_id) + activate Registry + Registry -> Registry: clear resolver + Registry -> "Events": MetadataUpdated event + Registry -> Registry: clear operator + Registry -> Registry : set new owner + Registry -> "Events": Transfer event + Registry -> Registrar + deactivate Registry +end +Registrar -> "D3 admin" +deactivate Registrar + +@enduml diff --git a/docs/sequence-diagrams/puml/burn-domain.png b/docs/sequence-diagrams/puml/burn-domain.png index 910e2f37462ff85d12b3bd90980a47dbb7037e36..0ba63a42bbc5384d2de3d4ddcb1b7764190519a9 100644 GIT binary patch literal 28396 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 Jyc>4U{tLDm3-bT~ literal 21797 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 "Registrar": admin_burn(cspr_name) +"D3 admin" -> "Registrar": admin_burn(cspr_names[]) activate Registrar -Registrar -> Registry: burn(cspr_name_token_id) -activate Registry -Registry -> Registry: Clear resolver -Registry -> "Events": MetadataUpdated event -Registry -> Registry: burn token -Registry -> "Events": Burn event -Registry -> Registrar -deactivate Registry +loop N times + Registrar -> Registry: burn(cspr_name_token_id) + activate Registry + Registry -> Registry: clear resolver + Registry -> "Events": MetadataUpdated event + Registry -> Registry: burn token + Registry -> "Events": Burn event + Registry -> Registrar + deactivate Registry +end Registrar -> "D3 admin" deactivate Registrar diff --git a/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.png b/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.png index 4d042c205047dc397666d54c7ccfab36b4886336..08baf05e5d9dcb47e4304c305d219b6cc55310aa 100644 GIT binary patch literal 62740 zcmc$`by$^K_cn^XK?Oww6#?l6C8d>+u0=OUH`0v(qM*_sor^B%Mnxo*T7WD{kQ5dr zoo6iE?|%3G_U}92xz73Ha9w+=59_Hp#~kCn?{UxdQb|GbBHj%=92}gB(o*6G9Gp|L z@ZY^ZPQsDT0m1d~2a~gern9lVgNKc&nKO>0shz2#k+Z4Et%n}BES#MkocP(<9c+y3 zoLy{f*o^IMUB9+d;NYB$uvFD_{?Boo6L1~(1dRHy-HrPfe3FZb=fqN&rbLOm2}F@mazI6be$v>jaWbT-ROjqw+)5CC*&^+AI+Ibi;4P2ZL9Cv zlqF=D`#X#!8&Bp$#>IZBZbn{`yjG`f#7E0~djtLP+p1&}7e~}{pVa7b9SgaO-S-Ec z6I3U#?{g8X6S|B(_YxzHH9l3(%YOM(oa`(ncQg08t-PFz(slGzl;;`7Wh+rY!5MmT3RWH$p8BwuKr=W29dYa^FsQ74{z z>32o<>NBdlC+KH`IIbabJ5-;)?Mug>f2!7IF=!olFjoAdQ1XELNHMJL9ck>rHYYKI~RNP@&=_c7SV~EHBObnUb6n;iFo!aBd zYs~w04;M761KF66K2c_tks2}g&d5*eu3_)$bBYbK1);P`Em76=n7W07(e??k5fO` z^f=h`i63c^#WpqH)qQpRzaza@f!h=&BaOjgbM9OdWiGCcu4DW~1U*d}`o$6F@77D9 zF;k1DYw9Qdm|VW7yzEEur0>I8gV~*mgy(mMFFty9=HspGyH3)A)IVo-U9BG{F=h1U z-W-c>Ipq94S?573w46Jw`u!byq2==@d*doOUo+z9Z}Sq{Z*6y6Z2F;_4DjADwf!boFwb*l9uB%c9D41Vk!=?I={4 zTzcmkPsg69@@Z~vr7K-1R6Eg?qFyd)L>+-#C$+@Nz$a<~gu~JJ<_>4$BQtYNL&Fwx zk>$ZU?=Qk#oL!xqf~DTBiF!5{Aog)^QtWwpv5N`^r~7(_>+xUe#jMU99}xJ@fesZb z5x1q0k?LPmRA$cuyHflt6J;`9AAkCmy<;r8NWY%n5@F%IzNV7JhRhr@Jzt=L8>Ld< zeCqf!tpy_)o5n3~GvbwBX2 zr=`5SnY9@j+9tDH5=>$x#)>38zS_O7(=6r5LSC*tX;Evh>>N|0QTpgJ$M>01`ij`w z-!TXh@y%^elC@&T{C+h@2J;*ts)w0^iFqvl_^_Az_5}|v4Xy0@vh%;6G&KR~S~qxn zf29@2X!Iik0qigCedy4#YH@2l{t!_eeCSj|5gGPhDetH6mjAF%KfV)D@y#q($Hi}V z@TO&!t5o><5v22G$LEAHS4(5g{t#G-pbK~)$xh;TH)DB{lVO1btwjzg#*tUa}Lc&R_fem@8rtx^a=tt|L`#Mn=iY=yDP6jY9WS!rwu` zBJ$^3iLAYq<>cTn`?~*dAb*F1Z6tikWmU8s^;{d_Wl6GgD(83tw!>m{J(tHss2{vK zz*IJ^y*&6CYNPh)y5!&n~MXu;rFi&XM#3d=$C{oiZLcZw?Ja78SC z-)qRJMu`9wQf7_0^?L$D9K&R@6q6YhC#p4%PwBZ;F5W92~8~|sSNpge) zy`Kv{oqd?>t_mQavV}rM*@BJAmFLN%B*3y%;{qjBB84L|A4h^-` zlw*ULhEnTf!QnIz2w&>2bh^FaZQxXPr@@YBbhr{-(y?2;9B&ep3 z@MDV_4`EvBKZM@{yswZ?^1y>MUOcmCmJ zc4_IHQgc5_Avc`p_kG;K%;(>(taMp&w3`3H+rc~j$@}PFtJjFRRl+Kn@0Zh#g3~)C zk>0}ch&@z;&)()mQXVNhSW>hBIGx{eF0aY$i?TRR^?rC^;lg=yOSa*#k@E4*-CDCp zrYB;#EaSZGR?2j1oZWWU=YL;wyw2lSQ6qWiGOy(Mje7@DwF3%lDtoIxTGG?gk;n(C z3gx{BoM%Rz=i|{Wx5};G-O_oi;NbdYvi)R}pC9FmU#O(raS94<-r)Fg#7dXQQD*|5 zWJBLgR@AelhN6RBq^yyVQ7__hE|RAgQS2#&QE&L~6;2`ces$V25)<=aJ_d{&*{c4I zvm8i(URz7ADMSw2BItYZuqSVOUy!<0uCw#h<^=zTA?zSskiv9vHX=109oP1E&QI@g zJEhv@oU_b|YuB>k6?qeXW$6R@e>~$8q{^jXH@Sud8xnL-MU-n+c>;3t=ICxX<~5h0 zZ790H`+fyZ;`hb4=BP7gGd5>q#}QPVoKBOULgDp>Dp!@f(78B=Hp=)2FE(Mb+_hA- zV$uKc#kRhGcorHOdaxJLLGXS`lr=}lmKMW6@irdqbP)B1uJIOOe#A~reUq1uWY>|5 z`}P3^qf_MpkDK*~TMK(DDareAznp{po%mWeitXu`1M@EZm_eE7j0_Z+z-E%LkDC65 zC`&7G$`y}lGncCG?I(YarzOJ7Y$nFQ_c~eqUG9yF{oCRlwopgTf7f&UoR3Os5lN=m zF_tqd?^MJ{1QBEQC+<~@d42L1b#>)=fb8H4d9BZApFA#GsN!|7`}({oqkdggk$pid z=PYjdkIw;U(~B5nOuOGkzuOx5w-TQ{ataEAf$$ou?vzKOA8|c66WOtkG^1O(x!J5; zaUqV^KBw;Wj%+Y-!JJi8jCCzM=QBquzsp%=y$^kfc^i>I=SkT70|Wh5B~(Q}hAj*p zRXa`#lbt${T~HOBR+Y8Qh@Z|{RM{IUHUA~-{`1LhSoG7VHa#l}Zoi?&Ii(F~CvSAz zYtsZhCXKD=%C2SF!JK;i`sam(c22Wwv4S3+$-)PWaVm?4bLscu zIu)loG_sYOB*#v%iX0^<g(GoKf;&8lNkHesr%Vo=8pTD!#OmaT(!gWga zu4ZifrTTuUsntl}Ug)SC`#C=~C9Y*Y`_*U7%#5w+`D^mK4sYvpHMy!A9890w=PPe~ zp`vYhN90Z1k%nsN1_Z>nZ{LQx(!-xt(>|bzNBRDm`4W2R;!;r-B+8%i+9w8RhEe3d zX0KLIDPSg%@*!i9o`ZCB9eMub{t8pFOSwE#tmR%_jZ}gomCGSk{rZ`dHscMFy=$Xx zA}MQ5vvMQ!eW^|H6%`dChuiT=B{oBqs49a-%C*mojBawoaV#bcbciH zy~FZ4hfr_hPF}NYB#YV-?a%uRS#~LHcLcmkx~Pdrf7cS^6uN-%m{)HA;loa=84QwX<7#cGl+st<#KnrOkEK zH1Rf=cac3C7VFLVEaRJGWWhv?+VwSVgN624H|#%A-2Q$A9fW5+kbm%nmoz{ue2Y;l zl=U7xsz{4+Qe1*HGtZ?bt!PLLnK!>Uw7|6^+f%Ah9W#ec{X(y>f3*LJ4X>iXxMgh6 zU|C#)VdJ(H>XWL~QCuB}nGba+yH&=-+?CqTCbBzE zQAzSv=ek2>tnB;JNoY4*g~ll^SGVT53VCW@&e}X9LVqFgPNhVa9sV1IA0!3g_I8V@ zTh{fvui_f>hZYhoel<6eKb$U)JN=EsiD3beYTcMxe&d`{ROq}~E=}9bVtcEJ?_|RXtLnnO<%@x)Vhq>>W1{&wbw6!694e zgUibI2^444dBp(x#?kmBMKLk+3#2@8y?)}KNb(bS7}fLNmX@9u;w#jtWbNNJJ32?P zu2bjk((*gR5_uK1~Q_~~PFT2D9b#Xi@MJs-%#QdRQa@PXA}Q>230 zww`eb()+%Zq*dV4^hmVEl44pbdH00;rh^{BYJ#e(esHYH_8e(?&69#gVF#J9XYR2_ zeak3E2XPuNsh+x5r5%$71f_xGMW{55Gehdq#1~ZrSeKTf=3?IzG}?K;zOP+ws8vF(&lrVx*&AfZ-3QL zed))K;i^ZR6|+WCfi`E zmr|oyVuH-}&Q6~yyK)+h-s61Td8;&yuam)4d^q!34i1C1Dy%V1+SCi9>I2BAbJ!++NGb8vQj!)D6ROF?Pw1RQw5d zd@!;3WObTM6MeBp?HCZ-Zz(uX z3e@%oD&%QM6WglPrl%WsMBo3|Bo?U9mE4%G%V*BZyVZDDLut8>seH$kP+Y7P?zl;( zt2;7*noWLSIX}85CLmA?rLf$(Qi&9Aecf5^Jf;$XWXgYS5~2FTFRIu2+4t`ua~r2@ zxqUoom`Oy=6zNpH&J`6q;?>VxTUk;4sZxSPBH0F|rtOi);1`84=<)@;tqTl#^45cg zTkG7W?Q*GsX%ZOu2MJ-+^hzCgS9P=GVjrzOyulnPd9zJIHA|tsJt{9VV z_>gijYGvBA2p{YPd{vUg2#sf<)y~NyU6rFudTy65k5q?j_GWeANOw#$wJ29_^E|3p z9Nsz?)wrc^AnlQ-j$w#1sB&Od+cc4UZ5a_kuhOt*ccs92X@B6=b*CW?wkU**i%W_14&M`4q6L=%ym?AII=CBMmN@MmIk6*y6^nmMFU z?H|RgCm+vyMAe{=h@!@4Jx@}Y@l{JCpJw>Q6>{M~bjzoG@#Mvz&jG`Txel#XnGB|_t#bZ)fy2bd zwXTSFvnrlvBi$yK4aVErq`i;iyaf}fY6tZfTFGUS7NJszb-m2_d^A^9UXJu;Usfr> z-Fvl2V!$HD-LR#&@bTiCGLi|hU4Q>8s{QqQwTlz;eHxZ5U*a3BN)(U5CKUUU7ZKr( zSw>BC0q04K48}8@x%KMasuzyPk_ot)5)850%3KaCUxp&2*SHu&Y+yh)e6-pk(Jt4} z;EO6~3u(vzu$*qAQcIp$*1mkhqicG?}p9LM{N<$Z`!WzLpx+GmpTH*X$Fcx=fW)jM>_V2p|L-`4H#*@qllt#M3*(kT&q zRfo{cU+s*mZ=Q`u3}pPc>O)C%24;9!UbC)7;hwCvUx5b2!1J_fsL1utLv*UFj|9Xd zdl#PAoqBExW4acOW>(LybH&W`=kY4B6&W<%Asb$q_@Rj@F&+2avt={OcQglG z6>#_-Sr>7Uv_j>s?{rk$yLSTf8ryN)B2~2-X`dSpT>ZII=mk8f$T`h=$Le3A__)dW zooVts7YdTrP53Rk%>~?+hO1U*TU#YQ(oN2`uJ=yr#Zw~qY$!DEc!rLhnd1-d@ z6N3gtN58t5bB^j;#w$$P5Gq-|4YoQr_gH#*k>hU{RgP%{EZ&bKcAuKbDk|C4>uY%T zWYm#)FZEk`1HRABDi#@zzE(8&$ZPlq$(b{mkPX!HHEYeg9@Ttmk8(2eo6>ajiLHAv z=AM4O{E>^xl_lHIKP!S_|A$ER9X(^mHQ8tz6|V?7c_#Jz?blLcjkUTq)9q0|T0&x? ziBohlH_f|}UQ*x%&~;poVk#zN$`RThmIn;ocV_Xs>cj3bK8Zz407{`}gibcck^OaC zrRuj_yI^(IYxPbP1(kEC*AIDFG2;g*Pgd=!L+B4G1%hVQIlfQFmFIjK7~n|}n_Yfm zU>KjLDjhADvH4)JHOJ3wD~MI+tg;-5RjsR!>{v zyRc28wquo6+za>$2(8lDw83ux&j{^AFR|eT-Azj3&JL>BSY1VGEapF%+U4-LT%fxn z#JxQgp&agL^a0paIjXRTv0%OS!5E_9Z3No7KbMwOEh>Exjg%!ZFfe%Z^8Nsw0VqxM zbabu@1FwB`Vjy79WtRCXz)(+}y^s-qcXA;O@i4esy!Vg~5$x~QrC zhq^3nc^{$E&$W*R`1!IjQ5pqO+r~4y6ti}(_YOmdJTOOb7=fKHJx)h18?#XowFD(1 z2{a>TOSul;PDNxgsf7cb5E`ET_O7wQW=Q_>KCrPh?Ka2lmH996etaGr5(u_BiAQtY z^BEbcJI_%&%Z(Hrt|ToX$>z&%y8G@3{R%qz+Wh2H)+YlZho2}@t6Sdtt(|9vPC8Su z59aUobJ>p}WGH)jn5Wdrx+TO(a_V#)eWatWbI$ZGOhHmwW2*Sgm%3aTw;2o8Y9IIj z_3^`$51zevgGO)!6aeO;I>-55+Kt5Js)7EcSWFZiT9HBPgYnFP3}R?(gJl2mcOf|_~?RNX@gvqo!><*ZNagz$pZ-es~go9vhEus+wbxw#1% ztC4Mu^E{$RU+9^YE30zaX^EW=&(1Y&4EP-lH~JmbPM`EEO0@ouz@ z`uF?%F_tC~97sTcS3X#%m)?UTT2I&d&B11tgEY%I+b>f zo*QR9qKdIok(nd(=Zn<7ZjIx%&R+TS@~A-)m<<*?+Mis1C-55_D$Ph z)+p?*n3$NzmvIbyB}h113Gzm9@$DOrYisvLs-1>}4r|?xwuVk>XlRH~)6-``&3gBl z%aQ+?sEFY-OE{Wa%Q*>c5Qz<%r=`}!8pPMQJyjODST`}m5g+Y>-s_N?3q`V65Rd%B_{4PJc zpMb;~LB53E7&p+(+Mw0?7EF2yAs|SQGulpqUGrbD(wE^qD_#x{1A(3WUtPAgw(R2JWq+<0SX{ zg^S;ygslfy=8KahV@qLD8efdmc|@owQz0F6svS)y)QO!+@@UE>#l^du;JT}zdMXEf z+G!WJ$`ZTDV{>f}Ujb3){%FFf-1&vDuyB5RR~I`EPjpmYj~}eMMP?D8nZ23vr0V2E zM5r=Ll?wdZ#$z!C2fn&VFI^fw?R%Jde>?IcY|dbB)OFupxxVx3Jn?FHxFfxwcg_09 z3C)v=gDizCh79HLM^}T`CqaK7qLq!73Oo>OPhhFV8z?g9%7uz|pMYLIj)seezP1D< zY}!t=xdN-=@bKusl1OG#ChV?3tQ4m6U~enrCZFTvC)^#1XFl626H&|>GyzlNen%h! zH_jPYo_XB!tYyAF(0lXanJr5LpI_GAbPuCM#ec7@;*BtL1M;xLu@rp>8ChvSkF?#cNntlR!vOboZk9DV+CV z-Q7y_oMf8Ug^ti)s7LYtdW+Oq=~jf-y?gJk;XEeMEj9ZRivEzYY*6cwF`NpG2>NwF zTrI1taaT(m9QM1OOfWvr8vHObVRnJgj7aGIMI#Qq13Tyvq|g52q%ib}$D~r2_j5ag zcI5M}7U&Gu(Xk4G0kN)#OVA>zdV<1#mGt{UnINIyT$RG$yuS!73|W|yRyUcPgNhd! zOd)IOT_j(>#Pc@puXVhCf6veF2=@w|R33K}CS(m=ZvE)dqt(?_nTx&Ri6%N0Z`{Ux zw#o9U8-L81V?{SxVRClI){{k3lP(QC~j>l~)-7p`;AaC57bu(QFeY2qOS?lq_= zVn9s2cIV;g0wBQK-Kk>XJbdMz8&(DeCQ8NGs(x|9aC> zLfBBG9dz-zxw)5D=+z6fqsZ0s)L%E>^*ku{J=ncMuaK`>9Ue}hMoUX8U3&@nzS?QF zgmCj?Q|3K{7re1-B*Q!FK{m?(IR&qQ0RoZz6-?!L3GYYR7MqzT7s>b|iWQ~Lag5ZsU!5-O_BoxnvK_F#% zb^)5OjSijvxS#BM10nEu+Tw4)zJc5T1&VHe=%@7-M*t*H)vl485Jw0>DTYh ze2LF-fR{@YaAPxQ@Q&p$g_6_EW8a&ByHRa3#38f4t|Q36Fb7q3G8ghZ{Fw#4Wi5ey zzx-%~*^ke!8Hd)FM)y9yCe8oZL?Dte7DU3nw74i&q-Zx*$2jIsc&)$pj#6u;N>8fT zIqj@a&)s#)fkg-;TXb2fD8C*m%3=Iz+YgcpH}8g?wKn#)kKc4W-1pd71q79^lBIyM zg)k?Dx_0GCQw8_0_n*FntU;H-h(HB_m|IkCo9jt${sKrsEGJPv33oX&Sec%sukS=L zA-^CgHD!5TvfS#N{~y@-s~q=@Zyze4rt6}YF9rC9@QR~}G!4L)|9bk-U3Gr)2$io> zh0Rn{R2EsXF>J_jld zSbJ9ne}=2!`o1-9h_gW1kuL=_5S3&wP0ugpX%vyu^6i#?X@^oRI=yI%7WUcg_H=i@ zThJB99Xt@=FVmRCSSn-JCeL|j2gA&Fz?KzVX*ZhY%cM~#M>|0^Q`OkWOqFF zPX>JlY?yL3(k7c3k1hO1R^P{^0QX;Cc;_htWbvFLLpud;<5s*3MdQ{xq!IF)Z8|_d zF!FQuxt~Eu1mDjL0EXn`#{N-rZ_HzF7h=Zgv32O#W_Q4qNqjLBWB zIu%tlHN8#upPha8_$@}xFlTgX^=*QqOf7Nn>(@v}G<88>K)}$op7S`KVPaWN%Skp1 zojd7Z*7UzA@sTBEBy`gliA+M?>EWw$o+o5BAN}0YVn13_u3POWTAA-X`!#VrEl%I1 zuk8p>Tk=AW)U;fjpchk2H6N$Sv>C&4?$a~pE$Yp_#Bq%kHS7ir%wJWATU!lQE=fJRI55REw92kq)%|(< zGn3b~n>THY(u#=lV6gFJ03z8qI+GZcQ{hF4C6Fa5FkEqci2I(Lto>}c6W-3z1478!cmYeE1|vc3@V9= zF)@2#un5$@w?5Y%(_Nj`j?Z_iZT8~z=wylrm5b#FXg@eOpq=iV@5|CDvoJDNg+vXY zIn&goqfmylhxv~B*X~rrrcYrJ3zKToq5zQ#iKLoB~h~ zPAKitw)nn0Ty3F%qO`NtOpXxig2*Jq=iXB7GJ;7)TKck^MK5Fv%LqvQ((Qx! zTGZaRLVB5MDJ5^dB)oD(3$ycUmR8MiQak7*kJgjNlN(;k^(|II3s2Vr7X+mSMhe%)IIqJ=;iezzq#dVlUq6mQ$_1kxNef_WP8dpr7XM-g`Sr2K~Cb2XPcUHgBtVX^FTk zB0vY}SYAaM9D!$pO(pY{`~dx}=Egx_#j*?d`1twn1WAGz&pd^+(d!w{V+(+eeRI?4 z4MM={N9e;qho-W(``gVZ6#)TOwOmyrf^+ycEsQU`_%k&B2wQ>)TjwNP)>8tK&O~tj zd_-i{b%9ir0`q#&>mGnb^a_}vBsmYOkXNrVM$GK(yY%U^6BMI|{dr$~iN%#^F?MXv zS=4^z`v&z&v=n+a62rM_dBnUo1l@02-x9tZWvniPp;t^YSvKkG3{!pi&TT8lR9n4r zG12$V#4d10fkcxU8nva+uw-duX-uYfY&<8Y+Sk(dov;LH7wniBN^uGZzs4H@#Hf12 z#dM&))SpMPH%D`@mgy)WBBH(g?HzUSB2OC1cW=`cFOKK4pwXIfm?J27rUu?U@GwAm zzCu?2XeuKkU&8=9qyq!d*g+P`xi2p6Uwn1Xf%43oBbUfT06HaAhQ^&I zP=1b%j?D}a;k4-HX zm93oqZ8!n4%(G(LV8+FUvHm=bEYs1e@{e9`+yqBLqpy#vphPgSZFkCvg@LKn;CG~c z0Vp;RUw&5L;ye!`Iff1zL_2H<Fe_s66UtLnK9rPfCow#jm&;A4=L+Z;>5R>B{xkIgRVpURaDD8Z z6^T~UZS+k{i!VdHNE1ZvHw6;NGM9)kPE55$OghW56CQ5=AW)7tswb6vJtW^5ch_f^ zYwu_ml&L=qyke*$RTUEMQi}6F@ZGPz*95~Lf<$Tycx^6%nMvkIhS`yAnVwUA!aMW2 zeVv&Bk;S2$5+C_aq^!!AOCfGcf(lU;V?j`3K!h18RV;9GX*6#lnO@~MZU$qjZ;{Ln zb#lH$;TtkShTCBy$d!m+bHzX>dsY#(!1@C)*SR`h4I!=Nk7 zc@TbXZVn*Mudp4K3C2k=T=lu$+ZVSUi=Y2D$~lO!-7^%rjoa+NgTsO!L%H($$MwSD zRG`jScOK5Iqd%Q*|8_AZ^5p1MR$`uQyr&^*8p0{QtNZ*t?;GWz2XWA3gY)WtSjT6#U~f6GW&AFl2KDAO4=geU!$Pb zKs7rZV^9bv06Hu|M2rv3&0`W0SZs|dT0$rcYF%0B=rUm;m-%k|RI@x^{E#W48}Fae z4)Y7tVUHw5Py0kupskI~=U3OM;cO84?%uuY{1cS}Tnm2EAG{8)aK8@@KsoKx9+@1t z1(&{_ecU|3ak}A=V3UhL*;82zBO@bpE_Ojuv=F*=%kXf2C;z^xsw%LKf->7-*Y}T4 ze0&aWJ2EJ^E1}h{7;UJb`d*lFfB)0!jyr49Fn%W=P+@SnFt!xVv?_}O-xQA zYF#lv;NPtk7Z*QxeWQo`V1M6rX@rq0Nzh{rXj?}V^Hw`^(M^75i=~n3vUIF$tQ-+c z!rps37{GbCRX>QlC8FK_?KEYgcS&)G13NBle_p*Xi0Q_oDz5|r&B0Luuw6cm%VTW{ z_i9Z|4dT7&MLLB9sh(){Ou1N5zC9qNXN^BqmX;2en06fTbEFl3UJN~px=i`_-X^eX z4gd?a87grCqy_j1j&i(W__Vb=F2ctb>$nNR#ZU#e^*~0<#e>}qm<&D0o|Xnj`@aa7 z!Q62XA3rnyXs(BPbtyX+3yuRQUJNnN$)#9#7;o@FVOqnen{AVX zyk=%*)WP`;7&)keQLS-n%**Bg@@&}zC=u`5hb!&b?HE&XVdzRVZd|^68Nk;h`Wyjy z_oHYAWl@X$&!qOnwFbMJ7@cB7& z(-LYZO0QpIhI0L4&o3A)C?*TDs%Cfl<6fbeCY;P|ZIz-dmz0$3yHi_L1z`AvN^N(Q z-_aq=sL_If-vPHQX3@g($~eoNJ9qLgVsqEyAXqX}UwFq&KExoftVPQRM#LZ0;PK0> zy`0Dc=&~aQ&8?nIMM?PtUAn@$3TYU`Ek1t!H)I0QQ7=?BK>4v~g0d>pPAiwWSygox z?K)IqT835Jf2jy~75Ts-$-jxc*?YM&VQ8=QxmD0*K7aaDx85uJC5}7&BOo#^Tl6~I z9m-wSE#{2PSFbL(xw$dTkJaxv)ib#7uID5t8^E%L4C8XJ>w|L0dZ7`#H}jto{)E2I#T#6PwGK{B>5INwOQW!Qm1m(B24c+RvC=G6FahbAo15n{ z0oHkbkyO*8K)ZbI+TmdOiz+52rd-gH&i;@MfS2f70)yLia&m=$v9Yo6&yi?gb3-+u zXiFhJKEB(xL&+CrOHpjg5)ji)IQ5Xw@q+oO_md9SPmbSBny4X*gDRF+)S9}2`TqUV_3MlU-A~&SZ>KQh;^M-i z7S(T}!Olceppw~7Gj-}837N|Wx%uhSC+P?}BoZmjTvlxO;VH-;(z5qs7^*Z1wEN+w zug__!HH_{^=YeRRbnCf0fV<7{K&+|3OaTVF74#Aon3%IC?Fu-;J)ur+zkhOS^6bxQ-Fjm9$oFQzK%Ql=FG41Ysk*xQ<+yH)QrGm)a%`-z6KA+~ zCqmhQ(AW7>3@R?WFCjIxZl)|i}A+UEJX`;pbXY)i~6?^w+uPT}o{{%SL-hhLgP)y#SBS8$! z-%2eYGJ$&^RQ~=l?#emXXN6aLOmZF}P?vrDbnwsj!OcGrUfSAdFo7eH#A@#Yogp+q zlarA>AN1Ty5Ao~=iyP;&JAl0CK>+r4O{OKzK}+M^H$i6@&hK|=hsHW z7e(STN_L7I0u{r*&LOTHX9`F^n3y%3NFkA*n~hBY@mAocSJ&kY-9r5iAzOB7oYph{ z0AQQUj&LrI=emVu&I7pzQ=Of1ii(Q%_RH{~*wq75JBi*mTMKohk!&eSiWd_V1uejJ z_A6N`4G6#Z%fO}6)T^@^wr(mP4{YCN`02;G@Ba#4PdSW7R`_H22U7()m52#wg%62I z7s%Mh-S&{;OY_|)TpMAr^8;~KM@MIM7(*@jW_@GhD)~&9_wvJ^l5D9-9sSnTS(UPc z@A3WuIb7$nT!Z4F(ZQ}=mJOX}7!*xxz&3sS_-z;R@YAPHZ{ECFS6?r(J4emV&Q83T zEpK5l_u?|OuCA`tU|~G~hJiz99l}Cng|;FPHpr5#c%c4j(nAWhuiuCkq=H=(F?iHe zRG$LQ28@A@J(4a-0BOw2%Zon=JbKSo&qlH7)kNO;IZ!YR^;Odt`9qbT=7u{!v}|(` zkwzeec!_dvZ>IudeDmgwbIsWc*WR~FL;VfBNSf)qPv>=I)-2-Gg$oxl3ch)onPtYu z55Kz3d7<6-!XJOU74Z|+2?+{H`!ZD1c16OA;;uu=zW-Z6!qxYdbj6}ij-y+@5GJ%6 z@2~D)sfkrrYio+sAovVGC6uuToyc@rG(Y2PLqh|IsNVqNL($(qI0$f-wZ((&IIxij zHeGPpd@BYc1;C?>TT+(LF~y<})9TmgzUQbzs8ojlZ5bNdRRk=@8-$`7S3i@2l4(p! z=j8?U0bDul(X0aIUlTxBhm_CQ^uqQ2jsSFr3F!+^c^V-+ybL$9+9~Ceg@x$o=wNe8 z+DcwgL;D+lZ8REv_T0I?-~=e3y}=29F>k!;8UOm#4xklXhyjw<)l(in6uj(DYj%Oi zftc)@DjL90l=rHqzu#qTs?A1+zYg-sbs`0#;o5zF2C|p#-$TfS9tNB|4*2>Jy>Ofq z%D)GE*Qo7Yq{`^X2*W;ZrR#0cd=q<0cF1Z`!OJwMJP=ZTfFBE>4-PA=yB#Ff>=P1d zXot}nmt!D<_p}Ub=o}vO4~cF9;b8$Gq0yls z4`>RAR!{8w;58YHZ#z-KudAbq<5dKjti+WzqpCg1;-<{wU=>~1&wP+%PB z>3OvH?Oncjs}=YmkT}q6mr)nCLNRQhzK)gX)i^UUn**=E9{{M@kO2CdvQa1nLPA1K zdO9!T@+)+5mqzi0m^?IoG4Wc(H^P!WIlQtz|&yu;VqXo@5A;2=tK$T%f zWVDuB5BfVkxO-^h#mRSX2HH63xsdC6PK-DDji>NGkimd4&V0HISN5;*$Njx4%(xA8 z2sj_lDkmogs-mNt8;P(9<5#QKH@F>Pcvc4Mz1)D`l_;c*7l3eD_s=iJ{kW= z0{}J(Cw74vsxC}S+^?0Akx4THPPDncP9*HjD5CJ}Bc<&~RhariV`D}tl>!hYWjn)H z0Pft+3fAuBGoqyn5g8tn!w+?lI`?a>gS~HNx$YM}v+{Lgs1{h|F8~WX<^A{2)ATZR zZqKfZ-2J^nF7q*B4>B3Vx!AnCuKS3o^?%Wew~` zO5Q|cqr5}I&?UXWWnpMMH8b=1ti=7k!NHiT5WNCWayC+&6X*zDezb=EvSqzVTR7N} zP~V1!b$W3*A5Dr|JupfX;_}#^SvPZhET^e?Ey{klLY_hS2DPnPgSW>|N(P1(o@P0t zDGq6o3NPBI!w7Vbi#vAnXPqWsAErtSHrYbzj3gNvC2}O1!)~WzK+-y ziJI;j>>|J$SG7Pqc<>o`u!@Qb@@l3hHAF;>&t65w3UDScoK$8gz3inNt$OtAByYh; zqo2Wi=Q?ySfCEnwB7g8^@kX3dedzc~F-b5i`QqoPmx%Cm>fd!#rJCkMisASF@Ol6n zwfoGD48g!{26I$k2T3_FKbbHgonjeUtCGx;eBVBNpyc2{Xd9XS zMo3dJG&n@J|C zT$TuJ?YOd!?b*jLY<~0lx%Zy`eXcKv+LakksG!W(riDsQWgmmPkviZgs}WBjU0ycPSuGr%kWOnU!sYYbLD`p3{U82Q)WAY; z>`$oQ@9nQR>u+XJNzu`+Yg5vemJNJ>%s?YXA~~Sgg%e+8@kxsIemGPgthGOj-Sf)M zm87zVg*P@fQ10mpT3=8lBzTWp!W zQ*jGmt*dVhi=H8f0P7DP;a^~?V+*B#TLkJ1DDN(AZX!-I7ntkZS04^n*n%eYfKk25 z_WRm&2T0rwuC5i}V_92EbGE)c_Ob^l8^iGc5JRowG@kXyJL48uRF|nAR8>`>potD$ ztb9RmgD^0(!d$ep%obFR5l&iaYHI%PfMY0_gAJ!M?8h6RkDpGWgA#-8gVNWxi}E)w z0X{n0T!Z*IFr_|{91W%)bWnl0nORMB^_RDInotxvu4FPk9{e>ZOhTn$X1P7OvmV$T}*R6J_ z{LhS3wl9wXr*dQ(xB!w966BuDLlrw~%#pq?{%+UiT903uAKpG<)UzEb2^atcOEIwy0PCa| zX{4v|DryRcu}xXTxh(%(olb<#BR}m{pflNdaD#{e#sz38y;!Shzow_B2mQOw3S?8B zYEJkE_cVqj*}p+d847Z4KIFwTBg83i2Z7*V13>|8Auf<~RrIqqKqh=4&`B?YO}W?p z3ft($oWzfKri|@6A4iEyfCfbBF-%}USNspSRKM#uCDk+V91x1i1T5bntfth9#p2gr zQRYA-LYYY2c=6(obLY-!r(Sw+5jgi}bcg*JkCpEqsviB2iDdXdj-X#GO@(hMs3npf zx|b~v?PSdd8GgrDmBvGMjI_g+?%XvJ5=rKlFJJyO2%28t)xBfz zlpY=)L)XS*Oznq&V?>jK(PY~UZfO(%(&<(E4m_}Eek4a&qz7Uf`Y%KYU%q-}V)=^p z_QbPSlkbVh$mCbQLR(^!nIQ54S!!jao2O?@Y3Z*r%RYa{H86Gc7a5GhwgOt(=1@I* zcq0l5c3~cmO1jF)!?NOI49eiWJSG&h4A_F?M*Pk6Hk93(I1q&wyqm@ zjsi-57Z^D^M_JCrkns-eUf*6UiS7Wv(lUIw>{QAdZ~i5YmLRedvTBaj(cuB8iByd{ zZ^#m-Gkf>}q5r5fk{#^ORCgo+*dvP(gTauTb{Gl$}0( znueBExfIl7FHcXrWRA$JI|%R#TPd=KGw>*9KYU^d#HNgplvGwL)C#k>sL2(XQ3lc_ zzm(Mw;9&I<&zVf}aOSrVMQpE4j8~g6JqEse8&Wo(!u8!hPAbxh|G}gCR zwgX0#CK=Vw-@r`;B0OROa*5@Yi3Zo5mxRlsxA-Y#B&n`%1D6-x{(fqL(%4akG-f2 zV_|vKUTHf_7s>ECtb)m)L2%;|5s|o1DauaiuCfgMrzwcsCCHl-I_|9u@|LR=Kr=yp zkpu)JaRT_@a9p`)0_yT)Q5p8jV3;Ez|D?Wu1gip+(t81G zjXZuJlD3zJe*|81i1m4h(jFb|6|Jy7c?fbyiitEcbU%1K1T&y<1?s`27!wnd1YsY3 za8Bx4+%DqX!GRN*g3^ zXxk$z#|og!H}?+%w+0T5?8@qDsvmX{E|0MmM1<*A;)EtU?*&ubyK-#iJ~kXrJlQCI zE)BU_BL_iC`~hl`kf0!FH!$n1W7fYV!xTPicf?8S->on}jW@>X&W8$&D2h^+z*$J3 z2o&BcPo^4Nv3kgPoVXu{(zy9I|6?UTb*~|B;V2Q?+6aDkqn<5DRY&&DE*8jUZ{Ojv&ws9(>-3JSOTD%{H9cwA;aCh$1{ zyB-3mWDwjfb2Bp!yi&g(dN-X^10y)4*mEgaR&nnjN6L_R=uVgeaKC#jUOJ`z#A#)!*-0Jp0}#T#lb>FGY=X;_1cJJN z#VF9F%T+I^dGzCf`Y_;9aEB|ALM4YUt>|uoZ9Gf_1O)70nSz~G5Sw83kRZjscKhC3 z>2K(Hh5SaOn{Cp@nE-qDJ{q9r$OK^3Yu#vpYPZadvK;DaX1F&Xo zZ4E84WN5kWu>aL^y~>kuPwwK=XU~Ag?}ExRp@%`C0JYabZ-ZRWJv4kBDi*^B_@bGJ zTm%BKxVQ*g>8Q|I^ND6ACQ5&7uCBfWr)Z=cGi(eq{=ay8?{KXD{(bzCN~NMQima9u zDpWF)63UEZwv-WykWEXeXpmB7Hc>)JMneN-Czlz?yeQf8d%o<(eSbgS&+$8c_aFCh zyk%Uk=j%Dn$N4zV^ZB%rkdv-Ep_|joaK)qn&x0-`uWriv?51(5^s>W-<#dVY7Nf<9 zGNJ5thYkk9bxwB;WutXk0@BTJ9qAcg{^Ve+u0JEpibTL1m_jeR}OfKZr7zP`^Ci8y`$ac&b@ZRN-|!j z`sX#wx|RIl!v}`7nS<@(V`|WZ1fhp*6;JcuzP)(30aZEg#i9XN6c@d9`;y`8cu4ou z8nz7w-GYKRbct^BPTijR_*-0)*iPKHjw{s;wIT!Zv zK&qQp%5P+GHEzW7rE&nnj{%%2bg5Zmyb^XsfrWujA1>tefZZf*uR!U4zb z8wVUJ8{*;NVR`$`o#n58t=QM8dY?Rhr>>=?WlQlSlPO~oDetxN&?26jMX#~aS&;>0 zmTA+fr6owup?UP^8l}g_ymkkd1Y$S17}KOFZ)zG-U{IM4B?K)apU9zCvlUX08lu7$ zp@$!WtdtV1-|+3uN};CNzpvEsh0fPtwJW;ko@GYJLdEjuXoP}wB5)?u!|Do3zcdKZ zLbL}4l$lrk8yp<6sWKVGeSK%hM^WL%y+rxhd@ zpPn^y?(!i`oFM;ukil^TEhgIz$3K}z6K@fooW!yO!^pDv=xzg0k3Rwj z3rkB|n-kunW#;hbU8i#wbl2C{Tf=Y(NIM4&1m$u=2X#dX=6Tr1BOpM%imwBUw%25; zG^9KBVly8AgSqBj)cuvW>anX6rjL`dyne!b$?&#>(W89Y9mBekl-} zMV_1Epi4qM}gKJ+ZOgwPu|q2Tt{8ClBTPjC;u)1`Jh%Cq;VWg$n%jXaqkr98t8~%Bqj)>i5v*57-Bls(Ak#Xs8oan% z^g)e92nPsFG@IKpzSPR=`VSRA(;n$q(I}hgGHhBB#U&v68m*1;GG0$f=wm?k+?4%} ze!HTkl^ENNyOeU)YIMiJXScFQM7Q;;|F%^!x>%gt;v&J@0TrKr&cTQ%JX5*l?4Aa z-uV^r_+xh(I|xYyE2q}ZxN8gt9KW`ImmBHKUq8Toq#NzZ@^otLe=fL~|M2gNNlcM} zS4+))-81UNqh?W!J?hjqlSn5?#OSts&`#f+dBC;<54=*wl&1E)!zQhSkCwNqh#)>1 z;(^l5IpS#6g-m_jZRhm%H1mP+n{Gonf$~rkGu}_jn5!b4`UlO_k{g%1?NfQHm<&+f zfi7Hive|wdSg1Ztl6U#^EY8~a#}TJ0xgysLb+zoFD*W%`$B$TaqpQ+hmQ+(c`^P|q z+)ht50CZWf3#%id+v!@{#Wt@+Zb|@@<61I;bDpsEMFn1s);ePy&|tF(C;6;P|M*sM zlJrhYt;)nJDPiO9%%!y$O_b!`zhlGu_Iq z8_xVVnA3_y6Q%ul)maRv+X%5xUk#13xv8m|(du&uHdiKp#z0H>U5PG9d|Lghdyq^O zM?W=FX5yinxr@q6Svva>@u=qJsgJ0^)CYw0vxCVt9g=VEQT@g;bV7Fsso5hK*}h6&n_Lt#0mTsS-U zYZ2`}Ogp52tr94`bml#&{MA38wYi{(+2<43WKTGwmV#*qTSWer$8Ju0DRo?Cb#6D3 z7|#5OCjK*UjXEe|QuGZ)rr&LUdCMbI|G@tD;>>F@hTmLXcEJNG!lQIB1riNwkj0wN zJb`D3O93=MuP=Br7#UPS!5+xt+Xr)x0s5$53(zybV_n(266mDh_;{avorDNaM;8nQ zL=W*u3E%~U!jI-sQBnPB%s)=l^6u{LCx&Mdxsm!PdsweV6C^1TDNmj{6|JAv0}QBr z#Cq481$Xf~Hd|KTpWD#h4*%SW5J}ceAw7T^5XV6a#NphvgpG8ia14jKkdh98)ooH8 z*E=e##eal)tX1?0HbOF5lsDhPRXk>OJGcF><|$taBHcbG;-M8F#lNzpH~5`Dsu@*{hw7cgR< z@6DSKr9L&vWh#`~+aZD@x~8V)-8;xkZr|h?<6x_->RVbA?>#c-t=S*5@3IzR`E(+c z10a|Dgv30w0{~7#*%!V&w_fkrNsz(_rYv}L=rxEFma9QNqQ~XpuB-0vIvfnS9RVoQ za8U9m9p4f0yZWH%J=zl5rd#YuM`6^03{OEpf#IW}bGPQXjlE?sUc(v{`O6lk(79K; z4+OnBC3WUU);Db#kKg7wgv8yXDiSH))aGRRccMuH)W6=D&jgX&TKS$a`LOJ14ftY zoa}8Q8ijjLtf<&DA=3o6A=^4GgOsg5A-^V=P)F?&V&ze}l6!$mL%IY`2_`i4>D-oPJ$<_)x&8m4GX{+rOlx0`K`IiAX0CF&hp|=#bx7wG-=M zoe%9d@oV1Rk$X{UWV5U{%(&0KZq1tIR}a_{jO7bV@%6dtjG}io9C|g{dnfy-@n&ne zr9Q999_ltWHEks_O;#l#j)ISE6ix91{qRAQXgKQWtrXQxIkAGUB`Vz~*En`ardX&h zkN(;(HDmbH1&{lf0&^n&(`3O}4wpVI{zFf%{?==U40`T?x0(t>mjWC|$#H<93$h#g zl}+TaXJ7}w#7lZNPHiSS*1#}U2&E(6N-3wU=Bp~plpVvis}%r1ZA({1WI@PwE|Gg; zt6riz#lwU}R{h-O%G^~>&$KEtCb-8$_qR<5P~;jJ{gU?U2Tx3rdF^=tnT4&K>!_B^ zn*Zj}&biyy%u2jq&cHl(QrQ0mo{o9edTPy2CUy^~Lm4U0u&;21TY6i$%7yr!18yQ&Z*?74`ij zAs}!~>b@#REI4UZRT&EQu1l9Mf5^{gZgr$Y9}9AD#(RGEWL>h-;1{WV?90zPr0N}v zA@cU7{?;hNB6jjq%LE_2b{YxeU%>lOtfdlk zic}&}QW>7C6bcyH&;TzNcruIc!nb?RE9z)@TwENwK9{>+zkbb|mS!Ol3(gdcYx(tq zMXR$>dmu|w*$nER-sWQY{+c;0-2g6|U@ns$`RVOC+-hj(^fMcbX1$vrgd44I-Y1^8N$}J`ybB~~% zuV!}(W;67MWUZR3Y~m>xBC-|-$jkxktNw3^YzTlc|6O16?g~4sRcUBZb8(S+m|))h zJwC0y<;&v-DW$K`y5h+wmfgPHJ+ZNYY##%_(J$qJPHY{zUA|d8G=` zFx!*!7RpNb{n9j3yNPAe1GQ6(z}ELLGD`qFH3mAyqx{E#QOA6os$}{j@21q!FF)@j z*ckhH8whwMq4d*`#hJg{E(LNI9MZLwVuVA|w`Vk5Hv84i`S(A*T&+ir=Sn`e;~;%! z>ivXSZVl7F4Flj*I-7Cvx$F52PxpyX=2LBD6I84{v6%g9k?lu+WFs?rsl0V6t>Now z0svX;R89Z@WaF2 zi&eR%KjXv`PyW$=4C0Dknm2=jG65Z5ypS+|xxk2>EzADzUvMl2jXoF%wW06Zwd-Qa zu_fP|NXi$kEZutVocyyS{TY+qX;V+!_r}J|AFpU}_5eVjFzPitYG*IL&8`0H%#Th| z{n~dlF5aRhBOUw~p)xrGzvjDl?*>H^({i?L!Km>pgQtGSj}LcZT7=3hPeCq`#P#RD zX}{@O5GKh*d^g?rkp2{C?;!gL83tm0v#|->JdHvagt7T+JEH4<@TO?AKKWfwNM{!3 zdf{aLTzHpOAVTq>1;EO@cG8I3?~lc86^!rfl1!$}+24WZ@u^x;NfkH!>^N;a@b7sI zrh9Badtv|TX{|A%iJGxk#^1x(I%g1#tKyH;+Kt98H8ZqCO*x{dBoble_UTVHhRR&#q|0{%oeE>I$xT( zTtT`0d?f9~%xh0>rtv;$l6Gvbsb7!EH<LPQ=kBWMeb2;_0C(=vcSo8c+K0Q!qnqy>0+)wUE30CKei zQ1{VItsj)3D`yca%Sls*AXVV5fdm>MRn77e$MWvL<%0gT>Pk!SDk$C|jkNDb?}gT0 zEv^PQ6 zKj-JqfYe`~#O1HCg#YwbP_+1tK(S;ecncF;5bmxpMLlDt@`?ix5R9tR6GSfz~lwNaCmP{ zIl91TkYBxYsSgg&JG-*c-QQC0WlJH#jzrM1U+}r)CYCZYv)}F8yAIr9LiColy1K0U zGqeja5A*;m;Lgv4!nUsNuxVsdIZ`#y<405UO1--H+CeZbM#qn9@TH&pde-0pS)RjL zu5bvw(&8jqK$LxKBF3s(TDOaMW;vjpxog+lowhjziuFR7L$Zwu_txt_@5*#cRqk+x zWY`6EUsQ@9uN`{Y6a?@sn>1mN*_#V-G`#;T0g+#*1&SN*6AoUl-Ihu~_b6o~4rY;Z zngn~xMgu#petG23-2zOBnAX+Kp-oW7h!$~&0}2$S03Jw!!R{`eO>)bjjb_W@>at1= z-XH$H@BM1;OAQ1Jm!)`cxbTp9nXV9qDUCshE8gTHpshF;+A^@*SD0YNT1B2yxcg8q zj>XW~dvc*&3ti3z)5ifr`-toY7u7dU)F{xzgns0$H>I^;IE&7VeuX(IyU-hT#7m2M zlEg(h@J-(|&Z-J5>@8HUKgH4h9GJ&t zD}?}llqyUN4A0_w>i{?nYF0cxbog)`8V<_2m>>_@FP*EKzk);nv3e!Qd!b%tI!R6pGc&bJ{Oz)nFsfA4G89@dT6 z>N%-BEQ{)c4K;er=CWT9u?zv;EL^YvbL37gTLESQQgh#er`I{)!GfW1z}iC`9)e4L zWU|IKrPJY8BdvLb^U`4U%O%Q9CkW@6wl+bc4lJ)t^}r9?G!<-L4~dmdm~FbIQZxm%8oru>5ZQR)vTQgS?=D!PXXf5!&P=Qj6y^zro-K@yJ%Nc z@x9rSW0}z(@m!5ZK%fdOiQT*3qgUQH28j8Og*L3BDS9Nr$r>UFY7gF`hL!BCMVM^5@E+6s86zGt=YQYZ#?P>l z+=jCTzN?Oa=zyGycNGxf%~eM%EaHv#haSbrhT+A`-XtsxWpxQeR*=7_AHlwYQq(w~ zq3Ks=Cr_?HhSLFwHg;ClG;sDh9-pOc+m;(?DaL}`J?#VO%+HGZ2CSmk0Cp<)DX$k7 zCt}>Nk=#QlQ07QC!DSP2a~2`2syyNR*)%kxgEgbJzP{uSNCd)*h#qpKzEIZ71;FhE zLEf$)-Karu@yqDa8JL-i=W8^Fc(AK?xT{bwyFOlQDM1YRB{XJ+hMaybowfLn14LEG zkJdrc^D5NGj^H<7ufnH!itb!tH5MEc{6?alcTnoLV9yAOBbc}<*ntj20n!wdUyaoiUc9Nzft33z{JAXE=PrUU!6Cs+?C46>CjLB%6 zoeTW|x%8U>qlg~Zb1q!CP#C$`v#`bHMFySE6TIoQUdT7Cgh?_9j-xo~BX1X)M$*yc zu$Oc!5AOjB`8Y1j*6*p^t|x?6shQ`n*y`1*VZ+4sQJ3p7Z|k3ccx(!0Gp93nSzB3o zUb&Loz#1@)zsXv?57zr!6upKf7lUC1f9J1X(P~wpWl?H6I*RtaX!I}3?By*ehwO0ANnpt!HIn>?tD|`>6R@3~< zN-t}yr(&4?jArU-N#2wl02onzxpUH6z!;78=ewHf@&{R^)8W{2X%6@M6eOJ>K#KYe z-~uIL7tERobvkwV{Cmy=-~>y6-&}e2zr*b5zxu zko710`4{{~I2qUfJM#Yh^C;qFAl2lSpI@Yac1Yd>>aEi#XsU`B1C}ZhKjmh^Z+O3G z$MNpt`SJ23BBry!;q>V)0SiRMKAOhbw`Rc6TaPa_GwybjB`JISYnS>i~l!B`#%;4z?3h~ z&e5neaOrP=Q8FnkOfGFMY5Cci?+4FUOdJ5o(A$Ec0zd*lc0pGeBOa^&+Q6|g>EX!H z(Iu!U7NYes0nK=mrGLIzmZS=I^|ECe$aA5vF!2fqly0`SM!=RAi>P8nOkKT;o>ant z@5GND9jkM}d=$j;MF$`UE(}`yojZ4;B7ob?8d)hgO|bdy3I}%d;*d5dHw6Wb&nzOa z5Z!0wr9tC&q9m%&{Am>=78zv*jnv$)s%=!5EwnvuO&pLr*;{Jh(rtj( z9k~pC(*56-ku{+(5XXj&Har#eT-C$2shO`LFI7(AQU1v7tb`vN1CM6vi+V5d=e88Z zYv5K*;FL4R_f=!#)t7!ZT5luW)ISzW^q@y2}9{bqIz9ehS)FuE8)YjQ^Lkt9&yJA`z$roTT zR7^*+BCG+YI$yLi5GvBQUtqdI6v1%KD8lyV$6nw$UNYmJi!R@8$d9B|+c*p!NV7Fp zRi$_KjM9kwgrB@4n(HV>y7lLNG`0d9B6>=gUg4;3Lq`}@&YK-V+1c4(x%W9V zg?RY*=I)_jeU!jK4oLO+)vH%{Qoy7=PeQis@Ls-g6+C^?(uObgHBlOYUg|8hq;O6T z`8P=ZHqPUu*cb+o)DRD^hKELNF>cc!7F}yebn$Z=Gd2H>N9HCY+GxjtR2VbSLO6U^ z-4XHzZ7p?i0XQ%5W&#Z6&Y2@>TyPL3BL79e3wz|31WThbx;0smd;4{z_BE2Iq~*pojQN~=uyOp?!CYD#^}55 zFoGOmBk`@o1|1{x>Asi-wiM(dXzF6Oo=2~Adwpv6XI&Ue+cO5+32NUjp}GMHpP=8c zM`vuE!Tn*w;yj65v$gBj$DxkH>O~Npz^_<4`*ALA>;#Z$*#2^u=_z2+AOapb@D^p9 zy1mAKAG04f{%FA^PtTU(NIHQxZ{Nm@)}1{uO|^U#FbcOdUq=l5i9*2|KKcX-z-tSkq%K)pkch(?wK4a>CwuuPqyXNPs;}*9upw#FBS+dlq&eu z&q*$640nN^A?{jR1J&aA*y2Ap#l|qn7-fZnbjCawBc;aw*d#|PNC|rHjtz_;dKgLT zr{Tn3k2ubE5`Zgj;VTqS#}3!hE?VTQX^2WXc`vC}1z8n^o2j;50v#EkpZnoM;l-uS z1VwdhF4xX#;ut6OI3Ni8vmCYDh>3ej5?Z?JKFPG}Q18`>#pb!+bN-1W3ujHRtM@y0%0| z8ehPFX1{rZ&S(fuSE7Rvt-oGFl$WP%>h>J(6x~RDnW`h&#nriQ`Dwk;D({xx20MihfK~=PU_YTq6AZJRw`a!t!W}X8cUPRp9VnP8Chi8Fgy%}@6t@lW5y655 z-A4CMJ{L7WncayMYZEm%_D1v|U$+(cy`dM7l3^cVD|H%ta_fO6Y*Qdq#L z7LWyl23DQfnSqdJ*aAser||z*H{2ydDcT56RZ*vgisViO-0W!?(Et**DVe{b+PSw1 zB-0i2aT_v+8idHy%Ntgd>qlq|BJf#2@w9V@U!ZIM4cVT(TdL&3k^lNQ=UQ|?wLw{T z$p{`JZC`W%VnK+Q)qT(w>!8KZJUsN8V?;H3IPGEA{K(+otP2Dk<#i5Q&-uqCg6x@0 zHGVMV3J40ud$O+W&Kw=?ILwxAdxH#sv5tK!5qX2<+ZiEkB3Lh_R5z_t z(iuj*3*Jv!ciQe3(-6N~yN+EXK^x$w?x+jsTyqqfoEtQ?O`kSCb|ziCyWLpRv^QWN z)ixF#LoFfnb%MxLS!;xu*OL0t>BHW;K#9^bba^H5y*%oJcQzi`T+#6O9XqspUvP9L z&3W)fIy{WITpt~f6yd+NAcknkf(z%*8;eIEBITg)^zTInG3rI$LfM~mBpzx#sd^`v%|r zNpqOg9XUHs_4RkqoGR0|lN@Y&Le|nWt$`R1HB(|@Vv<>3R^HC}GA_UYJ*Pj)^gLRZ zT=9$BinM%UxW`~D@$1oMFwuSZ>)S0A^>0NY>dT9gqSOqC)Q+}zfy&)amPsZ5k}s)G z<#>HHKt|?Qc&^l9=@FW*x$Zei3X~+`E>xoaBa1p6{OzqERA&b^thvX$&VyR2O~%e% z0#i0zqzHUPf5Ka5E*-lB_z1)Sz|e`i4vtRrMQpGm!$Gw9G2=twKkH6r3OYn^+~NQ_ zCMWj>$Gw~Yc)y3pg-$LQArdPD(Ahw<#uB5zxkgu^f6Z&111i1JqU9H?kF0qbCnnp8k4>ww|F+kR&6&0=+fYl+&rZyxGyeR!PeX z$b#+|`B7woyIxXIu}bR08D|w^544&>8>0uTIMX?zs#RS7EU~5hx1N3jZA=0#Q;4fi z&JC3CsDTb0UQiaQN^A2y+E{~S7zEnEDQn=M@j?-}8Qc;I2h^E9cvPY*>(>>3IsJ2;}Zr02L|$ z+ZwFiJqQjC#+jxrLPW12qyeEZprm;t@d`9f>}=ilclnHRib3$*HCDfXfW2bPuP)G* zz@ui3w@+jv_oz^T4mq#RFz3N|Pl!JiW%sr`dsQB^~aK8-HR% zA{&6LO5^n_8Wv09JY;yn;~xE#4Z8C=oR43C6>tdRrF8+^We_y!2U{P{O6QMkGYZIC z+vc`g<(H3}9@pw=i{RFw+>mEql8fsP*vyF&_W5ab;*wzAPoAfCTkeO(KU-0ln=>U~ zlac51!q(|wiup0rOvfU!`%O7acUu5zgM-~}*EqBaY~yj>P|%vVzvb&w$6gB^d*~(W z8i0SA8$crIwV(4^A$(CvtUx=oO;D>qoW6!_kx`UtSEMAa22f9m4Z4mCi@2~9HB&lg zV3)tQ@ZDqWg8Y*BqlSqHq45mE>2TT0ORI6S5t~D+&ptU`K8X3M6%=ji_>Y%ei*`ow zu`gUd+tBak&AR8OJW%6@*&v~d$H1Yz*e`%5HzO`jH9-r_Yv58$nY7dD;vu(A%%nK# zH`&cPT!CP8W3pt;GQW}WWomp^dU!_T>A9zPa;r@_fA^1Nthh2(=0(^GWg%&}GyMjG z#}X5}%4-KAq|%?ZV0OfaKXt4&KPk?HEq1@yGSt zn`4(0&$`UJkF4u7_zcRtgw(yaJb7wV2LJ|fHMhU<&!KqSW?HlFGjoY}-iHq%HpbkF znom>=Z9~@&CT`l1PTo@Ev?EO?!znd4fNXf?>zu+7zsw=bN@9xJ@Z^4uQrjUh*ZlkJ zO`A3u>n_O5fW8fN`G1LY8moDfS&hAo2U4bH--yj1ml&+iAv+;OPPn|&r zu(`77&6@=dG@WEN$()?Jz00_^tyoVYof=S(+rH2H*bUdAdJfI_$R2Qq1)H3At6I*3 z%wy`L9edDH*rTAB|JK-e#joYfEq{MSOC=p0mh5N%D}da+60~1M8P)XQuD?47j0Z57 z(_s{&k#>-Fa5Hmzy@tDW?&-VQde)`)6yNtMV5{3A0fq_I8)`J|SIS-kb zneAYB*yc`bVk+60-PX9)!Hz=q?dcgEsTqCnbhiQpJJ#vIlFou1beEZgxn(MfbmgVD zE=Yu@yXyuKdSEa%7g&@jGlwS${ZA1#eqrHTDMb4Om@-?a*7KYJ!cXD*kdnUi?pW92 zZ^_~gCHz=44^MX?Q6Br5X4hr>MfBik7cZ6qtGP&b7U|BBDa=tsaKfU~ttH*kaar1x zrQxAOV2`*4syA5ni1beIQ~owgAcZJNFjZZ^p#fG>Edx{AyOUgqZ0UAZLJD1HwDhWtfLLSO7t4Qnlb!X2>C zTo(*;!xe4v2h6uU*H9To4D&=+HMktS=#_lr-Qw`tSJ%4mnc(GA}$ZPMLc1}(&nuHdy{%l<&Sh~I0ns!br z%FN5sf%V-o25ArE(>pJ|8Av z)fXw!Yn0;~tk=BxX0`u-=KRZ<9Twg&_HL@78T6{NfoQ;Fs|l^qM%P(JQuB9gm(Dv^ z=J8!%zqdxCrN=Iewpk)dq&9PIY z;0$ZU+y*G^OQ`-hUDz!=3T@ZPdBW!kvc@qkAE|Hm>|WhU3!KrY{9B#7E&kKN*QX~a zJC~##4_ww&1B3^1)!2+ZNq8CO!Mmvx#ZQ6p*cHdQqH(ZK|3j1XqY(G8A$m(=$xEya zf>;22ZAi0q3H_<*mUZ}h3cuJS!v75&Q&XXXWXMC@hbPF#XIlB}lz$_+|MJ`YRI{$! zt%(2D);xah(9AO)8z>ocHiP#tltade42cr3b3c|{OPD1Set2qy){Xs6gI&9J?b&m+ z(XW+dNUlDXq#C`P_|&9b#BdY8#qEZlUt@jdwHy@@NWpwPr?$UKbh8O|?d8mo(%8=F3))xUkcR0fsH&A>n+e2+++ z(k-@Y$YC_sSbN*o*LRGPj)aB56`Qx<5GNnr+GO1}{R}K8J3BiO?!^MNz;I}7yg=)F zyv5bQce}8=zu4yP6fLK%~8@EXBawUGR7^2_I zV{HOKxG3KD-<5OLpGh=_aBKKfC0~$vZKv_$=WwG&nh*`25bnh6L?Pu0g`H{Hk83k0 z@zX|?Z=?;Vq< z`(L1wudqmiS;qOaVeo1QxSX&_9%f6Z>iX6{0!gFO`|DhbD%sD}x}%Au85bSaQ(39E zEj)9WVi{W1>fZIdp7G(HDh5In)(Vvtei%7V>`p(nuT6&YWk2p=Mg;Vh6V0suT0~*Y z^Jb5)BL6Z|ybxdxmdz)g85f4)tZ+eF20Ld7agNXIPHM#MnV&GFE30R-t1N_qkF_UU zmKUda3i6G<;6%pBrq@n{4DW)M<3k^$L>V1HpF9$~;nKjF&ASekVs{p(N7^$-MG4OoUwXyb=ij+xV=$rt9aXH)`%hfxN`wc#|Ot&q*^?f)p9=D#U9#&RT zdN5C!7Mn8z9rNW9m!EYz$-g9fE3J_Y?KeUUs&A*g+pKMD(1fAQkI+mpXH_+I@dg_m znC!0E9^shYEM{!x-$%ak#g1)C{$(wYQ#B0;<6c7?+c;$)jC3+Kjyj|8lK=MtXz*gP zWthF}xs>i9QB}hpm7juOQq1erSxRoUVkv-u}8u?7mDaV>nr$vmt2~!;%7F>unJA|W(nRB!mA_#INUUc!Z-39 zi8jD=UF*4*+3(L*Ttw75i0#D>0Hi!B^5NCp`=`9FFoVTeDf6}!X z4Pr~(_+bs5@V?!X1q{RI>;)|)f`J+kO9H`}9Xj+CxDT{>L^)T8je$$Q(c_Hc3Ehk3 z#4lgDA`ZemnNS3NQXG0BcM*GkRj>cV`-=2^@ZdqSHe}jKnjj8zQcm!?Q0-sY1qccO zZCC$xiOmn}I1{Q09~ksQMiBl$W4V5^DWmf$b@f5)KZtwC50Z9$efuEoG>o2pXU&>V z5);9}?aLM*mf89XDMa0o3x*db##5MFze*v$dYRwJzzCDdQ@)LE~qK= zoucEaQ}hOrv?hxtKK3`B>TbgI;1`@v zQQ3!SENGejS)4vRAB=p!<}h_=&3!tqii-EMcqtB_=5@(zZ^w{e< z(gx%6xDWCD*h^scW6B31I;$(>R6)<(1p5eRPe{Fnaceyqe$_eiABWld0i zKi%D6qFLJqIDCy)P;i9&8h<&dbxtD0rjTuomZZe&tG%a+(qqVO7Q*bp=tvN=1ADlh zI1$&lzhi1=^AL@$3PiX3AHSID=nkS=k4jx)=*MgDlA5k44JP6G4C;3bG!rAfjA|aI z3_+J8W`GF^Gc1e{&R|`>wKh4eFuzEa6>b*0AgM1rHmD@3k3=0b11rlc zg-Qckde@K@Tb$7!wZk}Qe@`0S9Ao}Z!1*5_@&t4y3IT5l^M(i~eb zzsBrFh#C5lg4!LW3DTjK?bWY>A`QS~1shucyah{^6eb!e z$=S{*TgK+tyB?~^rbJEsEK=Wm>B6WOr&M+hjvA~X-O5otiB;mWSIs<`CiZjR70gL{ zNe4w;Le)gKZSx;tWoLJxm2oTfvgF~O+6C!d7d4ERDQevi0N^HQZ6G|~reDa1Ofe~* zTa!$^Z}Zfm4B1qFHf263?yZVQxQ?FQ5OSrt*Q~izTaEgEww+tfTbUm4>l-#%ulaUF zk3<^%%I$w#v%f_W_LObgSYEOPcmBO3?dQ%Coj7(3G@ZI#z?#>0B<~tTVPTzM4?d#fxkHwDQ?#?3avAv=psPt zq%u)b@x+WaFnZ##pIH7Qa*GL)=G*bbbLyZ~p;GFon|tu$_&Q+;l6(QD4AC{|zq?v} z5Z&zWbD-pUTW}Y>pskXU>CmD;wh~k*r&M-)ROAJ^f_JX4x~-VlES-9OEP$H|CHlAH zUb`s_XY*xvsH1tnBz57H7vvTLo71?kx2u5>4GLOUaEjRtp?Jh9`AWEobH z@-|G&iw%+wr}y^$yGP7TiHpjSs5lB+mkF&4WS|Fy|MiQ<=;ycjE6p?<;WaU~M151l zG?X(jb+qbVI#a!1x?8w`z$hgAwK#2T04fP_~JdS=`Xk#AhlC}aKD_z|7oT5qWHc&rJ zzlh*jD~OjwGRj+dBpR-?YM)$U0uoi*cSuVaD2k?|*hC;FH10>&3CTBA*K~DvKwyJN zo@Y*8v@Iop;J|ayk1UI`t{!%sZ|uPk%>hXwtp%nB?(uCS{CogmMXpMUiZ3=7eFthW zsd_Hzd>D}z`glvp65S;lr-R3JIZlbeUl5g)1k-;-_cyZ-M}F5y9}f*Jaki2M%8`c9+epruJ88Oqyuot%GP>=$A8auZ}f_gF01Y*kur))rCai2Q-bjwzOV$&SWJ32n2?h~3H+16>zj|3gGY#H?+ z^SWt9ruQR%_h#JBN1WT8!tZ2EUD5G3z6GBN`l3RsA~!`3qb2(M(2-(^)e|3lbTD&N zDHkpqf15YAgfZ2b^p|xk6d=%adK&7w-6cvOmbqFGxP%eSdW))ZBMJ1V^Fi z2kBYr;(cC|d(G5NKDNaXOzQjmmDJIa$P>UqOVUKKf)WE+ntO7Im(8GnjgzH^zS3z{W)^LO zO7-m7SuqzcTp&zyVs8-FLHKT4_o2A~n_){a6E-os|F8}wD+Qb;oXNBdBH0{HL(m?8 zi*hvYe~#-D8oz%x)y-8I%3hvuqpHDLk3Kr!<^bZoLPZQxtuA~rlrsnk3;PC%-Ll-d zbtg`p+GulN=o)i2ii=NylCc(FE1ac0&<0jxPI|~!Vzw;^Ss*5~g8LmD26oU%VzNus z{bRD5>@@{fkEMB^OnKv!E7-@*yzbfMj%+RgfxR!da=2%c=KkXtk{>A%T;;fX_obc^ z%{FgZ*k1niO<_Ga$4}h8*?Dl`G#2^ufLX1cmiOk|#uOA>Hq50eXh?r)5_RuU8AshfI8K`EGe5;VpIqi? z=sUgI790A~%zT_#4V`n`-%oJ#SzU6IVCMDyhL^cyH#5{Bt8=F=1Jbps+XVXuUqt+daPnZ0hT-Rp^*H6jw#XO1A9a)PwHwYk_uoFXqA9oCv&#+BR5^%d zxW`Lw`uK>zhiLQ~%BL%Sfo3=169s_~@EP!Cg}Chr*msPLjZd6tgRCmD&HXfm+>I5= zoSS3?(lXmhM+Y$rReJ5id4ZDmn6N9wl+T}2jDvYkphPOPrvMuu)ziLcQIJ9fn*(lC z*=VlBTExA~G>i@RRo>N^)K{%zGX|d!=vZuqt-9|z*AA9vl0UMjAt{c{tx$02)RP}J zV8g}gdXWfRx{ba*oCmw)$Cz@;nJA(BxNPJw>#l=MXa-2_`p5_j6rlV*LAv!|N@)g)(*q)8Tj0qln!doth zqx#mSyYn)nM~AFcRSR&iq{lZ~$(!mNf`6ZZ9~&3Jej(xYAdnrnZ*{iH?jNt|G)_id zAk-+Qa&vM*{d|UaTCWUW5-Q>SWnwEEj?QpzYndesFkOdsw8=k2sv!mn^m zQuMQDcgT(TK|xRnB6*TyA&ls}TAwTKmD!S2WMyTM?&JJCSWk%{(!-v<`n5*VKK_AA zLcCsT-C%Q}Nde8x2{*hKaWR4D_ix`SkadkNJMLZw*OLiA$xx1)`*z-|1fuPF{1t-_oW*3w z9m{d!fEmeA9kQm)Ft)f~Wew?uHIL z$*@az0b7DuT#k!vjB&fNWI7itc4H1DRY&YkghCFcax|9KD&5{-7E_#(yE>AOCqcs$ zt~LsiSjEBPp<(b1U}PEP30_g1<0+|R{m?Wf|LTC#KD?qW`730nPJ|Y+3!#r-H#^)v@=hwWPM5N&V7)d8n%jyO1M z6UCIgc^k4w?PKeE$V8ev`2#_!lgHfh3Le(>_rvz@k?`p z@48Ec?%M6>;Gw!UwblLSV_^5n`lfNKU?M(R73$u)1i-J%_2;p6*w+2V9cRWCjuS^Nn<|#+>3CRsq$-&9VlK-@X+LGA&uM{g8efY5}PcHwLNr z1eXslSRLf&8wW1iJF%N_!qzaZXt)zNgI65N`x@I>OYMH#S5{0Ek?2*z&on+gu#Ew9 z-LF7F<`XR~?SuC_Pi+tvzo!-a6j!H2jb~IXZ6!<&ETwenj`~l~NQ7rBXWO(LtY%fL zGa`GEh<;{vE|~f%EZDlA%ge3}7PiUhgQ`D;+w0yW>S$>(Q65bwb`-;bSVR3v2q{pJ z7Lhg8+_5(ypw0v$oiEm?+7V5=o_sfu?~a#GYZvOaf*1DI4i)FlokKv1H7@9RJZt!B zlh2#P+@~DZ{e@c13|i7z^VDYfHOgs#rTDK1AW(Bb>neYFM+NVJ$gkxM$p7lc}5v37&Lj zo{gT=kef(OT82_%)k*gJ%MlY>2FdsOSfQl)c4F+yVve8el}tRhf+6CygfV-fhs-yd zP+ssCvvV3~gO_gFAW680?u>)1g4mdIgV@flzPIqk6>ABS_qU#sO=F+Ul74yJ4^3AB zdC9CjdeC82GPTb}>%JHXklFiuYuQ(%Jw}zJB!BG1J_2 z+AcBl^pnNaZ>qNGno09@Cr{;gkQMF@BRDulOIV-DqE{1#_Hl7evb2Az*2Wul7mqUt z3J7Rst`}0IAT?sP00R?K(Ou{>cIb;fvCh}%&dKAFk)14(6941abj3govmC;9piykU zPy+C3rdeElHEm;$3)ze zXBGTTsV>(?!M1~zk);XcuO{&SHu1=1!QS*3jNDJ3s=<@M{VjK740G#2NxarlrwR8^ znhP%GQ?>#6WoXKd^ujKC_tR0Fum*HoDMjL%ZaG=gO&U>po(Zj+K`dZkXlp($KM0T=!Fo0r!3SNN*CtJxnGiqE!=A^E!h<>~rO zHG|oOzaqbO!5hf5p=`(HtBFdCrrGB@9zTAJibi1ldfdhU=f*n(Q#8l;LaTA;`M6dC z0ePyH4GO~*L@fssBQYc|+K2E642eJ-c#F$m@pc(HLp~ovgvZ7~MX2)-Uc9k}Zgx4r zDkK;NeWJjB&MaU+7gD}p`m7!|qRkNE8Bn{Q9dENo?EjdPgJ;xWdRxA=^%ehleLP=J`H@K=J(i{NCrp9S}j|=EVFRGBUzb9m;WA`0pab z-w&7>J>aRfKQy$zD@QAS&Cp6u6H_y#tk^2SC#@iCaFY#d%5BdGq)$d|oj$BaZs$#E zImW|27ftsZU6sC1>QY@}zdWFJyErW@&0LGv#_=tDECE#J_1`+qnwvy&BO#9+OBSt_ z_0Kr?|=TYGeN-g1Mndh*ATTT z8apWmFKj|Aso?J)bS99Q9IhiVP>CX30wl(C%IMtb*)!HUB%CXkrv8vbY=3`0x-z>U zOL~Pk{?)68;RmhuLi+0asg3r{)TeK0LBji6Zw_Rq{X$%cXB#B7lOaea;B}nzVNMN7 z44+~AyX)s};mxP7#E!?6Vn3PJ zPA~H>#Bu#Nrz%zfp_1NM3f&&Tu(=F7Qb?aCS=j56GuGA~&Xc~HW9o@(3D1Xyh_L_M znab<`-TL{b*nM2E^0x^7fADocgTDp&<3Be;W$>3_fl$!@ttbEA3K|9~a3?5n-;a50 z`g&=aT)TN0|9!h^)?{9B zt)|(mZP1&y@C(-tB)-PsTzGtbLj#UX$Kt(PqFam}eOp3bXO(7sa|k+yp`6TzlL5~{^l-xVjF%R@3X(#ot4er~jjDr^7nPBcA`-EHIa#yNc^ zbjA3T@h&dXG{z|vx_0wsq&LJXn&PHK$oZVjK%Fo$!lJAw03YQd+zSA`xF`{1ZhBYJ z(H19u^kej5(HCAeD2A+1AR_!Y8#8ln?KwI=sxoUM4!ieb7ba)+)m`zH?9m3^xhHDY z17iJ>t#D&)`KeZv0)4l$^yZnwQ2oH&0T$eMYFNPefb zZ%mx6CL?!hwyzAs?4e_4-A*hWbX2$|X|CD3H!?;&70HT`izCyjD@ygndLKGGk3PNl zy+62lR2V0qkpu?VZ(wi4Irys{A_Cmc(*@E0DCp|7D`}|XZBB}?F67ZjlTd?vp#yUR zJf_~MY(|JPq^-VPx>ZJR`;L)y;ex>|^y3oM!xd3ET(3Y)08==@S$?_U-sTM50B&lp z$9)Ha8GVQCX&4{9cyXP3cH5&HlDjEx0iOz0!(*m0P9a; zM5v-06}1I!nngE{CE6J!w$+YJ?dTYK*E%ki~F{rTO z=PL@bG&G@K4su48R3qlRz6Vi3YxBFkU58$OFq@ZFFJ`f!2rYo(wb7ZlH*u4UZ3sFQ zH+IcU>g-ftP-Hi6$vt zb&F0|%ndS(fUCvmA0kN$@x#ahp^NCjFy&su$`bA00XIk1O-^V$F)SZJ0)E)NdN%9E z({S^>bt`Z)V_SLY@VQVppF1N~Z9N8)KeWGFER>3z(TcuW(OLZfMgVW=k!RB*E^`1& zVh~Iw!4bKcT2!vF+E%udS@erT4d_9b4`A>=rq_-*ctR%MWXk3dLAF8Rji) z;Un#jViiy?-A!34NvtW{nFOB`megG-vmkN1_-3`6oachf5ysEdU%w35`$t#LCN6u| z64Xt}TP}=7(dycZY%4#`-HF-&gMF>Sy)8ckp?}vZLKMo*wBQNgIbgEXQzlz_lUmolINLwEk31@`CO z`*-c@oO500F9l}JTI-GHed2!Zo6mvbhMi#3_KTGs&N23Y6}WlxCh*N^6yEs)uJ9>w zAYB_DD6ckBweA@S_Zc~F{7`{6%!8X>;v#zU{qtJe`gYpHT}nQT(K6pf!!7H33E`U< zusw@igO)!iz4_l>20G!Vyp}g1wgKk>y$O^}Oy9+vzjZ6I3#dv9c4>no9|SB&Cl?Tp zLJ_(4t^*B&9YEmAAbSg}q=z=~H1!#B&x2`@9uH1C0(#T^ej*_gcD>FovZw;?0I)X~ zN=y*Q6#&X6;0_W`5xB%UCNgQxX}ce7+5!?7aFa{az0jyKQzeNJn*Pr(ByG&Y)&`}d z48}$fb1irp5OA#W#Bl})Y+jhO%8yFlOjp4)L3p6A4<$7y!b9kd^sszEd~A*wr-exf zLRkSZ1lvIWE%4E@Jj#)rZI#|l%~7!vd5_;$et2Pc98jganV;sDY)Tee249`V4$dhCqig1%_;77I z4J#10Q15DqeYM;7mOJh)St&y7ZK%mD99>^iv$NZ+9Co8e=Y%B9xh&zc0iPw*b+ls# z2)Plc*|FX-SoMahDHRb~IcT9SDPoUi-X7+!3uQ<&CVlg5&%#FhdpEY}WXk>9<>iYO zPMkTD2Cws?%gSrfqU&ys33v8G0n8ERccyoIAK>qcZY(WK%C>GGt(k+>6w$glTn)H? zLFXPau25YAB4x@ti7|%?@mX*SZDC3NxYHGq9{)aQyfyn$IX^!S>uYen(UC6en;rA# z-}^j;L^Ia>oXvrI25#lums75u856nt;vXN#y)H%)69GM()n$NmhB%M=g?SIy!{6TV zz4c@A!7C(PiO4rHUxTTb>h>Vp=bhOD{S^=sF9gW26#xPUNb_`^T1MArX*Ax}qVyQ) z<=Y%&X1~6(X!%DN*D~*_9zc}=@C>psP^5f$N2_SvRQPv%*e8E7)~CMl=l9sSYoj+c zr*TVa7(iwhKNLRtkDr%;^$SscDt&r{Ju(NNp(gx6kFw)4Ed^%F{lc9u4-APbtKN5e zQ*FefGyXzxtu~@|cGEVdz<1)G3?+~3*f6W%g**43hFJ}ty47l`x5rLN;Brj+uV1lg zKg;^JXEyU4RwCUDxRjb)7p0Vc^k5hU&{Y_mzc{i zhrf;ePqQ9#-SS@<)SvIU%`31ueXzKli>4hod7}Tt1f=j;*w!Iy>orrP>;;;qaYtMWq-wBe$ak765Rk$5&7#$dN z2yh%WQFhhohn|De9GE=L{&MlZdd*{3cy4iK*faq31{_Ke!NK}$VoWum62>UgA0_}6 zSBz-RZwCn$`orzIEFU_gIYM^<3f+-A3H4l_v`36Jp-J+@Mv)_zCBF|lvl7GEjZKo9 z`5x3=gP0YcX%<+)E`Tn+ATH=)7!sz4;fL3ctI+SvH) z$NRvZaar^%yYCS`+foM1e{gD_0p5%Y7hVBaOs@`h2#d;d1{1v{s9t5?0*A6y(^?Lc zgn$+iO2d4ruTk%qn{)vLD}eK_*4Tp5%2;<%>mh1cA`E&U6(Uot>l~j%zO;D% z)$8vD;l`Hp{u^tUTqF4J$e^G*(2?m3EM8Dh+@V+53$&R)Ya+8%1UlqkyTU06l%_oZ z2W8DDZn6*Z{>35s2!bRkh$d7ayb#j!0E+B{J~$<-YrMU^p)v`Q>^gaCa5&x4*O!tW zeHV);LqX2%kdss*)5@4vPO+fFW5jne#v1}d24(pGZX1>6bxlXz_*pQ`m-1ZSUr|K_ zTK!ivGSN}>i;MR!y!pesc&Tt{xgC3y2adoRtAPN}xYT07u762RF`$38#7BvQt zd-OxWwdE;XH%w%8HvnW#`}VJkamOus*JWbF>tcOI!udB`1+PuP}@L zvgCiZr^mK!cHfwLFO}eHU2y-t?ssAl;o&S2NkF4gO@w+5t+FG-(!M$Hl_9Zv3)IAL zhldS_fc>EG<$10Qo)6>##pzZ7!$e~TZK;;SK^w$TV#1)+$z!iMV;f!nG)21y7;df?MU ziq(MXp=|Nl6pL8_(3}Z)_E5rynXrTQ3vd~r5u-BqeBirKrac(djHu!OfbZ1mq6!EB z;C9#6yrkFQb(qux2bs|AY1uA&P613r%#ZQFcHsemK~>@5<{ysj2YKVU!EEPm?zhrbH&OZZh~fY6(Ux}Cg|m!-WTEo=z8+G} z{&vhxsjmtPknHQ!j&;Fmh;;6$1MKtMI`BcJ6Z>^%g(m*et$gb{@;A+ zw=nEKyvD|Pr4$|T{_DWA0Id`i1Q9^~W?fFf2SbBecW&360%z%~8-eKKAz1BDI+z9E zdO|`%mFps*caYe>6`%dh>R}YBzq&2S<$GFvirMO+ZFvuTbyDkgLdf^wUmpxr z0?E#=uG?Zz>V{kF{UploEo#T@mw$?~zORmys1>y$+S}mw!s(;W_ytsEK7B#OZg!~n z(`9_PZBr~H=E^+q9uSJSF4XFP4DMgh6%})Si<`hsTBaneI)~pJzDx8}B!s_g;?z>g z{d$DvcT>OA`eD`Vl!|yliCexsJ=b0jrElYpD9Fu?)-jF#W{tm2=ucbea24=h>=b4F zG2Z{*dx9*NGkO2LzxSJK{L3)@h(q4f0CE-}o)9MsxGd)vY$rVUdFkxlZ-@ll-+kRz zSLq>B{qS}B3yWxn=emF=hU}F%R1S+N$wmh`NcMbR|IDTgJHAfUjTAt)8u*z)_2?8} z)hsojELvB)2za0DSlkex=yA|`*_RRPSi~?TmzC#+)oZ1V= zR&xyq$93n5pIMwx^ab85>`0NrnLfKeO|QDLBjo)6lRiNwbQd{oL5>KTYmC4(0EtM5 z(DGni_dS7J8xVBm1H=%{jx~t+y=N>+X0Af2(2EL4TKzMDWJrzEyeog_0hX$8gfEJq zr+0duexQ1v28`}j(yBP`q89Z19Vi>1hRBuxYTH0n zEKnr%C6e_1yNLCQiLnKwCS+x0AxC+_4Z3bjUwM#0{}QkSS^!leXlGH=?xUgUgi{-m z5L%D`1~MH?Dv%T2fj5IL<5i$BC#!@SaX>IsN}@^8_HUQT#U2=8z{T1>x=cBQnY#`}iuFVI z5W$7>?t~NHzdx#YpZ~pVAa5@~!p~iMHZlvb=py$TCDPAfb8ELMU2ROF< zFn@mzv~DObfqd59Vgz0ZYv3vb4gkiC#R&0=@76D8KHbR2&JHUJ+{D*_boL33#W+uV ze4`XB_cc*B8Gjy)djZrW;D$p+^SM$&4M4;9A3t8AqU5*Uls#YtUA@qPmKQ$@L!>vTp&E1hro?&ByzU z^x{KVFeTvIuF*W){OV7p`1_W{U$HUPfs_|*BGe4Bz$=Cv?ta#*BY?(CWG`oS8fjxE ztAjOypp}92-NQy#)X;bhxNX&Q4bi~w|09uxvy&5-CZciBCQ}URz>^)I%M?dPJ)7_t zs%JI608~6|r+E2?S^8IzBp#Nxg0%Eu0L5BrJi85%)PUp_D4PSkH5k$kkg82&S5A~g z&sg;X;u0p@=h356iq9(EtLm&k7a{c)IC)zE{MVl+si0udn*P*OS^R3UiV-ZV`yv+a z7)RzsXCW5)%r$*O;(;^f7^Hl_5rk?yZjCV}=C)Nw9TgZZ9l-dX8{1QYgyV2X{%+~; z?+s~zQ}1I@7eWjVc#oTGYhm$$w3R!k15?UgA6}XNEP>Ed!^lDTnVX74wOT{Wp$O9T zBu7>=Ly?>%>Bz776%xU-kc$Kv0tk&D@EU-{_h>L~PVnY&N9d*$_$AV3A+eB+76!Jc zbZBV;%r=s|ba9?G|Kmp+4wY-EX9La>P?d$BpLrFpeeV9Jzwj-ulCoP=6|(xlu8@(1 z6+~oI6l>V{^iTU&MJOr%y7so0WAt_obcZhD&{UyGBRM?N@rf% z>|4*A{O%`xd+(p~Nt;A6AxZJ`cl{R$p^f6idNS-7C#N;UNwBPVs7S=*x($a|?jb?+ zKcD4UAuMwwA_k_VGiT~FxA@aM7AGgDY}MeTZR)mc3x^EjWnYYty(0vCK$petR@B9i zzlEfaeLZj1_Jx+>QgjCeIEz4^1l3T9+oU8fIlmwN*@KgpA0tGFfb_4Q!@_mc->*Am z<-m|+d=H#Kl6w!=GlsvqMWIN%^NA3%^>afdXV>?vveTvANUq`VQ){Sv3TgOXN!MJ6 ztBN;vA-PwKhX%qamX{Jvg0I1pNF9l{-LE8n@@mB+y=_x$GVA2=461c<(kW#oWG?k4rT)JhAI(EPil$9Z5_%R>;0Ix)Q57l!pu@lpNyOUq^|1S~C6 z>=?$n0C_Unpgs%Xs1F^Z;Q|<~&Wx(_AIce3kW20j^D>wB!Xm9)Ld|Q8j1O9i<{B79NUU5&0vt;kfERug+V8~aqT3xn>zad-Zr~T#wsrl=a$-m9l zVJJ}iucrzb6;!9hpXL^76!)Bx{d^y z5A|OzqOVMhAAB`18!!CeW6~yqK*!!6cHrv@`t8$TjzCm^gkcQPIUphFhVF!) z{()VITviB3J^XZ7j<}qC&CI}kQc?|7ejS_$ml5DZ2fH)t#}l8PHp=hm$pI< z`cSFBfVc(r%~2CE2114x`N?B}P8KA6d4~n7LOAKmm96w5>B*GfAoX+>8YPEzY2eAai_z@&TGT+#-z{Cg3h<@dyQnrFPn^w zXZ6DEI3baYZ}lu%edw3V-o+*|HTib}}2eu({Ms_gdRT@!VaZ>W0f!#FF8 zJ3VEe;9a1n6Z)OYa|g>w>33;uX&e9i*|J4elOZHF?g|D>(xaAsaxWWd9$(WEhqgN6_YFQ?4c+Vw-Vu1+^Vx#AX`iod565&Yh=q2v@<6Obz1U${NC}>Q=ip|~IEd!CglU2WjDZ^ zy)ACJ$gK?gwrg~EdGa|%?z%toxZsA@uA<7`cJ4zCyw_d^tU(|?Dkw-#J0&P(1VFB> zfN$|gC%c9tU^J6v5vgJjv|s~Q9XxMnj50|T1gt8c4)o<9!;I*902H+2nky7iyFlmx zO25GNGYBrdPcUa zQ_6|E=!J`+Obo#!M+*|NL97XqRiRZtb77n+77MT&0(tx9@Nu<@9XV3sX76Ik zeMNxYU+k*zWYzH#(m_c29EWtZx{mV@3}gTI_nLIj)Jbxt?K zlR?Py{^Cs@JY&_ZtH^kY87FCnXMF?N2dxWRoUBq=mBnBf|pMS)Fa4y z$dejV;*ZiJH+*FvBx7(?)VSd!d!gjt09&uFff7qK5qhI)h|oY6Wz(Vt!y3t7gu~%V z0Ze7(2$_P(HaNGbPc$FkfLpi1s8o7W9~bcV_dg3PYW;`T;Js_Zf!FI+dkxfsU|Hy9 zjub3!b?-cXl*-w-thBY;PuBIQ{oD*{PS$y;A7hbFnr9PglSwMmlQ270CX#=51_#nY zfLmW_Nj7RP73wdUYjK^b6E?w!o<^Qps=+w_-Nq;m3W87r$LikY&D2s!lo)xr-LN<n3h#@bQ)8-A@Z%@(X8B zbz)ZF>&RTzRKSglI45;?2xC+}lzHR0*GiTNur}0#Cep2Lx2)o&(L!;b@I%M-m8rDu zNU3*l51*|=Ho;$V4I#{mlaE>XWh1y-`A;qmOx9)um}ArJ>|%5F{vFvt{xQfmS1hn2 ztrhD9*q}ER6$mRxazRb{5S}hmZ2hf}3KGQ1(8<6vO2>bP892isYKqm>;{k?ZTQXW? zmjHBxNyH1ZyoK-FyN~z1Jgc$!&(z5GDHEP~nigH|}dH*R|2dIB=_8r`)I7V)ui`mw`0&5 zjjP%9$yaDnUq92_PH{J0r|f*oO!=GO)n`9O0G~V`CqP!YpHg2Q`7OXBt5c(z?TwQ22 zIW2lpIOa>2=rVWjUV1U1r{6Zy^6;93?a-ZzH*a2?iA$AfV*vwkdCoNOq!f-=?oJ;l zPQJ31<$YTyAmv2OYPPS+X|T36`1B7!S4E8CmCj*GAQq>8z-vDqqZlB@vZM|9rM`sI zje4re#z^v{Yvq&3ngc9xGtSC=BECDL?_|qgj!_@<3kp0IN!>(o6{Hb}BC+R#Rh< z7g9Ma@B34S^&PIi$~n`ityZYHu=7fN$eFFJwYN}XU1_~fsx7g@At=Y^I*K_f z1B@(Lv9*)0$TOrOrbnIqjP#V0yz=wyhY#kN$%OhA4JDh%4(sQ@p~-1J_qnmiq*a3; zdfI|4{zlQAf`#D>*K^X7+%X0X!UtHdvgnk)>b9GcQCPG4d{NvlYCnDSyRtR+?7=Td z2HKXF9zr;zicy*=Cw+MM_3G-JL~YP1>lU>)Kn~xQ)~Umpjj9;yoU@o@R)b@FN>y8p z&Pl4pEc_sB&DhcQ>lI-f0}fwW+H-U`M#YB`p9;*?5;7PhGFS{`#;RUN+kY%us5ac$ zKkGP_RyJD5))brVdGumb)s9x3#FOB~mlPZADb3Tb?FmN1F(Y-`CkqUhSZK$Tv$TO2 zZ>z@*a-Uo*P}O`is~kgW?%Y*IHW0X{Zm0(*U=N>a=}#A#f`- zXgY$933KxzD6gruSaeMLbd`=|+qUau9p<_I@?y5W8ol6tP~;XGu;;fTRGfFGL%Y|` zPc$4F9ykgHIaM7SPD>kl+Ckv>((6@$vEs3XPgFqBAeRSV0M%?@;F<&KegH1bR0l?D zWL}q=%@iOUYAtc}lL}0%jTJn3a?poI*gIFQ8Szu_LMCF7sM0o@@@;91Zd+ZI1(kSg zhHXs%oEOjUI9r>h5zQ9>L92$8|Gu40CeTz!c+z2(iPl1B$ol4RVvj2v7;hSrYEqrT zqUQCA#Adl$d-b}svW1S%riwVXxKwksQdQf!6wRW{mOBbP-{~(3nCKJkO*9;~I}r|+ zn7H7_O>H;KB_Ck7jV}Zla;*>#k8rDaPIH~m6}pR>Ht&IxG(qFVc$YOw+NLJxliV=9 zgI<2BPU-TB_lSEp-zSwdLLgBbW7ItODcTj?)mH5AkoIpVuiwimRg60ss%aHw*|}qJ ztT?A7S4|BV!Z_QrX{~*VV%NG0^lRnYV~TI}rx#zBB62WPnjJ=b7cfoj*@y`3DdiH) zg2|?PxJAis#<9qY5yym9dMEP)O)Jp6P08;Q1ZstXzG@vJCBAp z&^z6|<;h|YeT1sazSDeI{GcmZ*sy6@{zdnxYVADRwdYCRGn91=CKF|+dnQ_XE_of$ zm~ZD90vp4F4Lzki2uJJIF<@=xX-;ZLQA#j&a(V@d&}S(?Oy)qgfG&Nc^wv}{#XO(8m*^bU82rM| zeo)hO{(RKFI^cy@WWlR3*Co~jfZ9rQBpM-p=TKCd3MTs;dRk^`@DphU_1}0oFDl@& z@i{!Ba+~~(SLhBJOFEZ%OKP=}yIs!}_t}lD`eij8wv?5_KYOzc(x4zrp&WILo11%N zET&m)2Y{fjD)ToL;P{&g{X32%%z_VSyEsi9c=80$o=dF;cV^=Rcg$am#|wXa^QNhA z3zIxWdRC&XZh=kTYYrt`L<_1ts*&)lWq|d{s8j38oKNI)X`;}m|4?o80~zAc6U`rQ z8tY(<-34p4>}I%poIc0i$QGXFu+(kO{2-&&o6_2yIHRidUh&yNx|WE+wcWNH*XSnS zt2$~snk4}J9BvduP`E-c%AXGD%I;~$4zIBl5VC86Q@R|-?oISZlL-YppmU=-vnYWU zSv#qmbL$MGa}L->v~2hUE%}k6JuJ1Rp_(^S{qS}_u{kl)#6?-7H!v^@Y2=vhTgJWMg#+Wor+TgNI-a$a z1Rga)UMhMWOoT%_1G;?zPK8Hz#)o+<(aI#gNy7tmzXjj3H#nTSYxG;*sG7gt6{17VpiTo> z#^)K3=c@91-iB?p+Z7U^phVbMGdWHTebo>O2rFEVYs+d30ZV(j~j9zIk>)Nf| z$J{`<>>+%H_*Uo1Qmu|T=co%fyzQZRW*NJR9Bdy z^w`?RrnbcsZ_b1TeAG-elf+nu&AY`db-YvJLoq7)-U~OFr;jDrs)gqjrphi%mOK<> zzuv|9i4iY2g*osMON)|*hP2SS~0jxH~ux;>UxwWw0sMxuxSurn~st;uddK*VvS!< z4vdK`jg0hNyx`|&QR*<5QPJ(Pqyvsu>Df*UZj7?->5_DtnL6UhgS*g2Wgees&Z78C5Bg7iGW2}#a+AV&RbeQ!;i<9f z`?B}wlv}*q!R@&O`}pC%ZZ-&s9}65gqI*Eq~RKrcnLTDNI-T!#? zS~x}Q(RJfcLv6yI1Idv>dL3PTarI@(ENXn#@3$8?JA_7@u&r(Sk|%(wDODfs`O6?m z{#ijW1@8+ZYc;6XG!HJ)=yVp=+UGyhQ>Trey^3QEB{DJM^FKb`P1)@J-n`qKVlYXOd*L=+wbJF14(#xD(%SNK)6IAJ+NvG5s2K?=hO+UHmK_uIjc{EtQRt6IV{9iC zp|WTm-05HztI!C}mu^n={dwp#4xZ4hl&`NU6|0<&RERope2Gd)A4O2plMCa}7xz9y z-{oc#k+@+YuAX!nAI-cGr6WplUfXNxZ9O15fJ;w*wb0Wmrq>xqXAq`B1YeA*@N^d5G zPD%DaCuhWBYfpQM2-oUurE!iY1t!8gD~T8wK+~jI+E9qRN9%Z0Ww!byrg57sBJRoZ zP>N9EOt~Mk@X|;Gv6C}(PmoWB){=v-LYB?&94_g&6>rFKi_g6UZTSKqGXh|oL} z$@!^Fr#`y>*m3=0hkeWyz%}i6u=&lfVu&n6>b9yOhO4@Y50Pof@62)EE@aj3(=Fi_ zb*EKp4qDg~#C_Cp8IOvx4@Dbp7uiZt1dcDSB(dd$LQ-zviA6l!iliqTUgq=Tif{zG zj^AHUZPfEg4NdlD7ded@V8b>%ndoZOS-ZZ%_drW8-kZl_v*)$a_}Q{)*Ku6Yl16Ka zOyZ>}Je$O|{xShB9b`m`ga82$S^u<%%e)J^Cdi=-s=G|&d=Ucp3uu@!`tVA>Md>y~ z)wj8@pS}dyW{X9?iKC|mam$uw1%)s{hr&hTV=#T*K@)>=1fQ;i*@^zOxs|7lr#X6x z$@bq|2vOyF!Za!e$-bnp&-F{dEzdN5y|jG_9RpM8`s1dS<$rGqr(c z;Fw?VnI}9$$?$Se@2w9%u-fUG>b3sHF?${FO!JyBu+%b|c3+6{+ar;}tgAS>t<;9AsFkN1i^z?t#u~i?UHgY+;^9A7xr_Qya_u-GY zbd*-HcJtS+7)P_~wj|04q-wpSEF5VMlmgFu84nr6UB|_}eOA31$Upu_Z2r|INd!4u zY96-s#o_{WJ#vRdq0s^)1(0vomdTWc!sk|fz0*D>g<0xz`7gK4CF!Ua-y*6{)q4Om zlmM)XA0zhqOZ+dBvdA54Lo;$+P>$wQ?QW)(#YS@keymqr#0yDgzv)Ls8%uN7j;#=N zbD0gMD(;J7VXm!W*Nt1)XOgW0gz-_lmXtDW`XgqQ68&S#gkW(sp)-$)LtKrY>6z)Pkyc?cpf~_~c7gICH`yWn7m!-CK5; z>sB}Sa#{v;xS#yADg@fMBz^oe1^BgSENT1v7x0Z<&;&hffJPTL+1c>^n1(;`2@jEOT~vJewK$uQ6`{(5OhLolKK)?3n|5z2U5HOK zlB@6IcPzLw{h1wI+9DW!iH=p{tOfqcda-2wVTmSaH457d$(qpmS)nUy4!)(aIj}BS zzIsC-6bgIJ#E!Zav8euIegT!?JfHGtm5`v;Wl-j{brWD2r;=~a?=y#+R4E4%5pnBO z$Sr@YMcHXs7u-ZoOfoy9I#`?69>q#j&nl3@=We3|H32%_2(;!my9>{>+@Z5YqdBzc z^m{JTK|c-hp0tBa@I9a&rx3x-Dzsu?BD;r8DVUw3$z7qH;_Gv>7TnoDay>owB@C}J zHJ4v|SPgZBTG!>8Hn1NdU!%EvsRoz~)30S6E?a@(x(5@ZpIK!vhdTJ89-94k_M;l06$xQYn5 z$RM^|uSBKJ1o?HFJ`)yc)C9O2dj`c(7#nSJK;`Rg;Z7v8+TRrWwxE>x*V7^E8$Z98?o9GWFR zhTKpLm5d)9Z(s^rJ+u#gyr)^shaCeL6DXz+Vhb3N_1cQm?f$;78?yq$c#tY-sHx$g zvXaVU=tQT5Z9GB1MPm>JSp{UCaHq6{V7 zjdTrN!+#CNIljm9e&6@Me&@Q*bq@19^Tgh3uXW$|y7#!t-;_K|Kt+H+AP(QSepLa1 z*!LKL*wcJ)4}3zQmzV|rVX=}>wbC^;voq3rV1GtslSYo&Mp)IGaX53Q`sECo3^ z&5Z7vSUom2;?OlUwyv+CgG(bGu{b?t@x?UptEF#5z zOX9Qv1CsYMi$*v)!{S085%ye}>{Tzz-(qP~7xUR#v8XhY@K4+S5t zF)~WLWSL&N7Z#zqF?^${MfPmme#_I|jY26%QF{9G)?MW-m`oi?O0;u9qZEg|Dk=LV z!Y}y9FZT=0vTB>p8Ab+N6hwc{<|Phi3TUGgPS>6>(g+I>*NZEWYE){pXSyNKeJr}) zRY)7}Lwg7Le$sFIEMqM5%bZ9;`7G|3%FJ{0?)i3%mQ;0A=B0zSn>>|OnI+j*g*cK! zIp|}w3n2q%C`rpnR6|&#bS`ITedDTlrIqbNVWe=GPVLe1r-N~hBRQ*yG_FU(&N+M} zud~nyoO!cIP;>i?>oeUL-AwZRehZ4mRpiCIK^3e?2|W@ioaRMwWCmHGaqoEKl2tS; zG;*e&-zJ&&&a~t*mOhQr4PIy2a-l{Z=3ARwqE1u^v9fkn$$6NQDDc_sW6O3fo}moo zn~(cwZxUihZ?5UrJ5&hXQ2l0cX}(}Tt?t`^0CWbLTqa1+)f7`l+zLjQQTKXsPJ)9dwIWbf&x`apfMkklE-NZ zJsV~vtn%{Wv!FNm@d6vQ7wFsEl?*DsI$D`l(!X!ft?8N`chY`=YHoI4BeW19zjo~u zG6#WhLfp72u4Jn<-FwKEOrnr)K0Wj*$>omAmp@;=zUMSi&9QTlcS)|^Cn3czsMj;Y ztB{i@uy}TgWKV(<(ZSC{>G*i!N;m;8{F9*WkIZmYlc=QO)>< zsOH}I&7CJ3UlcWOYxdr@=2`9%V02)B7>0i$4~W_A|Ng(W_zPsa|K}unR2vuK2*mi_ zUmwkKm)6wOILwulq2lGDjfX1p^lO97*XHlq{kYPBdC^iqhpmy%Z*=<{cRubtaFa&N z;hC|2xRA|V^)8KgxrjhmNw|M>9%+425we**dEuVS&3d(yYB%zVi!BWdh8?i$`s;VU zpR_V6i+nuYafl$*|89VlkonLD4O6db4Yu8*W=DL6llmPw?S{R+8k(lYc4z30_1jOe zuP=Q6GViE4GRI~PtCmI16vG_U9W6oG+1ZIX_xBEphbr+aRdzogIC`>L z#nuu3`yam53uK~y|D#mw=ut*9sE$PWzmp%Xsb8i5Q}U*lzdZ6n*xO zwkDe6M-S}XJ*C5+Z-K0{z>?2J)zCBpgQ-WMyf)XzB1T=mPfbTq&;psjukpSz(XJ_P zKilJCU|>2}_kAAuy;c{<`~m{D`<^&T%SE)5?OZ(0SSq6X>D5P9Vl?ab>+qL{eNv&p z*8lhl&Cri0e0r)Bmo*WH#smMWk6bs`468iI{CLJ&lY)fNWQMX1-@lL0Fr(8p;HI2Q z+r3**JK{W5a0v~pt1vI72csKQIg@6*wS zl8(%9bX?iN&b=M}RFY-4NL=ls{o2I;%DR%&;}KW8BR}F>wVif9Rh~(&{pL*KT&WN} z-|9QIOkWc?DdAje5Z~aTACs-4X>;u1o#M6bM`>PbV`7d<`;|EO-rrcBV6wXsdiuwR zO<@EZ^B*S#JEI)8S>-4t5AnX2ll+>2`IasI^SMSJM=s13HD{L<_?lRe(z2S~r2ch> zK71-k?-7}B;VYCv20i1dhT?q*``vzwUSTmIw}N7`g+)EfUPdo!T50yr)UAl0ZxKZC z?2~EPHm}20QBA^^7%%lm>k-+a=WDo%h(IKxJum4lPv+E=S&mLzW0x1g#P$C5L=uq~ z%!j&bY`=JVb-m%6@fKZZ4PaFXx1VI*VCLNYJ|cgwR;9|sgr9$fF9mfDy=fOM?NHLt z&`?WD%l77Kvz!##^LtPgFJsW0ax0C}oF&mjfyEuQ?r8~oVFmg}M)-*kbKnJUExM$= z3Y+iwoc)ZxZ^?b8bB9*Q%Bt&I8kTwP%M1ab=O-V>%{snjMaAmwC)5`oY;|Nz>}-wk zVNN3&r#(4KrDSR2i;IlXy=a97XYv@ei*0Z9=_C5@zNMUGUHruZb-W+V|~vUly^+dBEF2FbUF^Q{)|&6l{P^*L6KP;S;`l|i{?XD?ex!ndPSM`E{V7A z=DYk;Cyyd{?6*^k1Nb-{8upc+ndZB~E=o7UH_%kqT(NqlbYrPmu582571MIkxMk1o zsLu^2ML1&Z+LF~UJqi%-m^+9l7)PaRoT3@-V@SjISwl&~JJ=^<(Rg_Bx^q?gx`j0r z5UQ@*4-%@zVz&3+DYO$@(_&+H*qq7B>kp3>&XJ_f(dp?g6Eq*H%r_q%DL95(9tDWW zquQMhjuRhrqI$x4uH)N;@1AnO-=ELK;DSldT2D__P1d8IvD#OuLcys;BVaM&Ma?&Y zkGq!e_B0hgihRV&aKIdi5;1E!_7cy`EzKy) z{lLCUUL_RAjTWtL;OWq=yp1A{@L8cYoA@>{@T4Rg()0FQ+0G3+JQF@a5AOiJc(3Y( z0Likov6c3Nc>I+rxt*1J_e6f`^E{MmR~U;(KeAaT@7W-^iJMKU`4TO4QVI&6lVSGr zk^223GO(`Gc2d*y7Xm1>@0?zvB0@0#PnVdxZ(u&rgn}hO=dh+`NBLKJusf=4w_P>G zQTB=U(zPeZ(Xp}kT5j{>4R#T3X%DaKxeI-Nw1KJ@95zMqZ{wv25L4;>L^*3nZrk$K zT&@k`!HI$X!KUc^{I%`X{s^8&^$WxJHJ)#b@ReK*?YF;qe5KOv9i%%FxJ`Kv!N56` zbO^okX6yRufZ%DH^#d(lZj;Mf($dzn3T>QIvchBd3$246*V9UPxz3%NO)c7b)cU@; z^l3a9Ya45lL4UEs!84_MSdX%u+rr8hU^JJfB#)fjs)@Q1AJ8h?)zdd)!fKoG_aS_K z;Er+8qPcYe#8x32yM?7?b8~b2&9L03o3mS6{Wrrl0#aW%D1=%tMMx!jZ=G*2@JP$d z%9<-y!9{fg{@Qbjh1*71-#BGMd3A?#M|T7TpP;?#W97dOqa_|vl3CZxfbaCU!}O&(QdIqZ`5f|{rb+k_tOptEh+1Ev)kITQ&LhTt zZ;ROxiamNg)hhZ8;j*&J*u7dbIhSVSA7S=5DLAhgetxlP*q)>vbr1D=<4xMlkg8$U z&RpBEs2VJ`21!uvEBLr1-Y}<}Wi{760qs1unt?PN3;1$zs`^v&trl#f``p5neG)aY zG&d8fR7{I6#95A|)*wq|->qqFZ@eL6RgRAEJGbpM)||7wJ%^qvE7J>LS>1o2eY$n( zOUV;UwNg^F-R8{1>C=zV0jy)WvTDw}9;;M*CJHcJgM%b#Wuh#6tHNpYkCbzFmrWof z0_zz;rI>5%2HssWQr)pPnm>H_Fp=x?>Q(p!-BOIn&bPNB+?3CsKk9*u$(;qsuR;o? z>b+FIvoS?SXBYb<$55R6I0W|B2*>)tI)ZaGXVSmjhiBa?eb`JmXg6+csgy|uMyLoBz*w!_AR+rXWsoikgPO4X3_bFTqG zR5;_Sq~3WmX7AD!)dmR&)iRXSvQF1Zkh0q5D;GE`u+=tno9FW7ZPJC-_j?(~kjuL5 zJ5(Koi!n9iOfpg$*%qA*1rXwsm?bA~xh388mYa2jcbfvMk@>a8Z!C_x9yeULedkUL z&!bZLZ&}8(Jw*0r*|o6~&-OA-Frt{_?nzh~U$|iIe`80dkv>Pifzf`+_8r9y>Zo3^ zor0Ow{<-F+IJOM?-A(94$$?D7N5R_(i3Y}qc`gcmV=(0a|lk;Cz#d;zwZaYkEeE0^ZfnKf}5;w3(hvT}*_8gvA znpj+8#;)WQ5R0@(AUPPth$0WPOK#ZpSJdbI3Ws{XL zl%2zz_jXj=cgIBbZRv2)5U-v)udzZ~+Kz`xU&ipIt5-?W=#7;NeumtRUNDDd;etZN zOjoAf6h0x=G~g0-$_am)O_9}}E3Wf`$m4QM6V?Oeht$3EQ>=Str3upc=t84N-%CjH z30o(-&75OkaKx_X)sVA^(xLB_x9)GAAsBp4OrB%h?X422h@7vu7bq_jo+-{8cUscj**ro~9AN5Ym3WcX8u}0dJSH<+{MyUAHxYNGfne<917CURz%AulAGJJywOjJ52y_#x@!g3)Ds0A=7 zk|!s`m#bfeL?%b}821()PEoR+6%Ky;Bs{f7FRP~R=c_?^zUxW8@lrVV38KdM=G+JKFuWxAWMHF_Y1*B8ZxiWa}I z-^Oy#_1oSAz_*COF1pg*=gG`a=)aAIve}cf2*NYwYP+jEY)r zOYXd?ALJ1B(kg2W$>xa{WYSd8l6hG*>zn8J_z9`ThR0L9S@2?auoN)02X>AW00`h8 zQDX@~2r77{U8}2;-*oV-6w7lm*iRyWz)MxdRBBqJmXGYH*VT4ui(RFdID6L9SZo55@U2NoAcz4EdxhoyVaM{Q6 zHYV2|KJ4%yn=-(Y6k|@=;vgtpcsD=q#vm;^SSG@hln61Pnroy9`Cc);zORUHH9o?d zO+6da;Ak@SGv2!>j%SNtuKTzj@7Fb`n2|!~*e_3}L0$up0NFIa=E+o>F*(Q9+E|3; zL&Mm3xf?P@pD_b57nZL#$m|G-58% zVFYBXt%rPGJBV#|xX|&*I?T^LnZuRh;K~O|#;p~KTTEKUm`ToPDxO5u#A7Zu_DcGU ztvmQ~-c2JT7d`v*{gP_V&ruvkX`60LCecU7P%Eb*Rq8@>^c=NqKfFjp_4}*eT9-}C zw6?8(Cm=me7f(ROl1`&1n`bOV4AkN9l0Oj;Ig+c>Lq}Y{cpGVc$)wh_yVRu#^pCH5ky+A)~j7`(kELvecZ znlI0mZDFL%%+i-kC2ti%6iv%b6F9$-6WjJb69l=q4gPi9!HzXV=&vg72|JCOiXNbSkH9P z3R%CJ*^~cbt%i5ER{MXw7p;=U2shtMPQD1y>g{7HY%!uyBlz=)H7;7Ur(Vg(Sl}r0 zd}j(=Lyvoayc41i{rZLQ#(0c$5XWc{B_(BVkqxIg#Vc;ZmWSv-_Ok7j?nK4-jpeEK zJX3A0%C{`He5{0rh6**UU+OC-DvVaTAJ3z}YE*mE+RSuS*(Bb4zW=als5kB^oO{d; zEd&_z;ut7%OjTt|VwOP&+0mm%X?x9TgAZkjnd;2P=>hqX73ID%LAOv|UhYDu!sHo? zTP~D`^CfuMpYP1^NfG#$!3?>cw0Bd9IdQ-B{cX0>2d}M6cYgHjkUpwg{@SaATQQ#qIg8UDevNL9ms=$8Pu#*jahQhZx06K#z4A$0>Z%;v2SSk7bV;zz z+dx3iJe|Afxy!U1^)|4=hSK--qxRHWJr&WXpe&I;bbJ10Xy~2+eX)6`TFV()pZxsU zC$j}(A6y8V-bF`8*95RG_Le+ZEnTb^@)5(@%F8#lBr2-Km6ersNhEk3aU%VVEM~JY zBa**3Tx=Oy{OSPg9wy+F^9k;UjV}%zm%@rjO*}t9{2=5cK0UxYcd6K65zMU^9D7c-ZtT!<-GSZo)->-#r^lv{L`70Vao?NKl-Ca+ayR<92 z-$|N}{W+)Gsa(_klhoAGhc?zf5{sqF_&Ae4QB5mbjQmR?A{Kp}YQ;&oou5WCO;cAwtX%=A=P% zGg-69I{A7h1A^fN;tmVfeBamfyB{IEn&iTVZ=L^O3B$>2((~Ezi9CDL zg4@>pTE+;ZufIR3()-6#ZI9ZL2PLc~Ao7b>`<^^%N%)$i!bvb~`?X!$QMNaKbGB$A z0fGbqQvMQlgL znNh#0)b75LP8`Bm#BOFeZe5VJQ|x>YBl+xmfEm41cNFb1f&g2F3JLOB(%KR_#k5{C znn)+Pn0>=!j`d^zQAd$)f$Z9xch)j6gZI$JtFzO5eJ4)i0GZWT@y4WCQ7Yp@jY6x| zynYAPIbJ89^iHB2EHb+jCU=S$OM4lKPo8;i^nJFw>1HGEqm=`ECOxlhuH1zc<9DuP z_{Gd~V(!DBfD}4Ds0&Rg&H>ShI;iws6@i^A9@4}3K|)%sWH%AW2LTmj#|x`e`k$_b z2@{rc(bzf)rlS$zAGq<-PszwAcGz}!&4rpQkd331@i0cn|@Dkk*krA=!stg=FQY=Q>p@)#W8;VdpdM=LHNO<~_&EW+ye&@Y&atEv_%N2vqA;@328xT+v z7cFQuvzKyVV{{Q+0)M<>?@yK5^~w*CHIn#;q>9)8J$T@u_S5Cow+O^Q3X}?UtPVax z|L>P<>CjWBS;Ip(<$dy|Wpzyd5cYL#j$$0W`yy7JX|HxBuOMb%4h*NcJkz?e4Hlto zVtYnFfO6rsTH{}*{&;7&9J%(_%TXZy3yaI$tW?nxA1>35U&GBrnZt@U8>2aP_NyT^-(P z4?-KV8U?#%AvYISCUPCK)PGa!o6_{#o{<9ki{IF&+&Qn^VWBUI5f*Iw0^+-qG)z5> z>{0Cu9&*J*1r$_whwTkLeSP#4B|f33H&&zZp;3RSrj~qQN0@x-9RWwjox;ac*5i$L zA$vht9wTc@)9yz}2Zi!H+P`mKOPaQ0xf7n6nwsx^>~o&m1s0=EH&+&9q!f>^`nI&z z6zvrescGKOld`{1L#X)e;OAK;uWG~OZ&!q8NMIhJ0FpVy6nLenZb1J9`V~>V{{H^m zj{*eLGl58XZm!P7XMx--hWSj7kvcLw!6Hww6$_bYXEG@*++oAOBWK)!|LF#IQe&L# zTTro23Rs-w{R8R}A2EobT4P=h1(qF&Q!T0tw-978g+z6w8Na(Ela&Ak^cTyWg%?pGz@ zd^#3p!&G+Jg+N$ac@RWF)1G|uOP4PBos-2?1nE}658k0dHYRuO^k~}jwnCK$Rp}KK z&-6-@*9d{YPl73#65-gmU}6>1F3iX7*?te>F`@u^qeQgtzy;J_&Jh zHo9pq1-rUZfrVa8Jb}xkF8at|EW792@zNw~I~Nwd_^yD@ji+1K@H715b`<=>`Akou zCd3Y-Vxpr}c^odVRoswnomEZj_QA?MFLp+o^jW`>lKJ4#vOlZwHhM_^;3Ii-FY5`z zHaCm=s-o2_p12N7(EWzv2(vSJ3$0)L7!3}K7m*guE2u9pvD!?vc^y-XlexQ|y%E(5 zBd`#vVATh76k8i|@#2HpNJCPgFOU2`sWgb~Am!zc-j0kQeRS){s9Y%bm$ap)U1iwi zG>GC`w8~;<&NyQ(a&dW|6e)zFaDWc^dNhkQmQ}!Ppgih|E7PD#;V0j~m8o_g?|TAV z$sZKuL;`|>ssoEjOXd}FyyqWGFcqGin3be^dUaxL%~shGGx8;SbHq=s3BMS-G36gF z_?X31`(+M&cYxLwARH$B#z=9iGgOpPif#-^(<{FBRb>s1JPxt=@bM!m#06DB_N4np z?;ElU$%%j<6%Q`$VEcDs-UVsdy9c6|`fpj2=j}xo)e^_*ybMiIKoJn9;Onvq(Ke9u zGZtrdjVAWKb7p-L{q~&)(+bm;?&YryAH+_@vEE_M!kr*&+|ztaeIfxOi20e4tCogI~t_D zCAAY@RO}l~Kh30mM&8Vjp3BcT!qn9(7vjQghun+iO5fVc zim7!(3KI@n=%6$o2xPyHOOKd6te&%YrlNyIuG*q<^^2q7j<~g*Az%D}RBRxp_Du;N z(T#Cv^6uTc7mygq(W94Q>h=(O@Tu}lR55YB8qF`!g|V(_I}x-)W|C$>tt@VQ9u><@ z7=AigoZTi(Cjlk-<=RWKjBIk}F-8Qxt8gKpmjN^9fxy|L!p+m)?EkPiJ4?HK{f8aotDf{B_)Exq8xzoKVs({2kJ2P?V)sU+D zW}+d@P!i8{Fxx)O<&Q!81!iVTXA(4Nic9X3{9?^)tygphB^6*RO9{^ww6?jacqE0E zIV>V#F1}B3A=N+g;pWPWLu#Kk08XPyHxeaC+-F(u*(#DgYgBc4`LYQ=OXr3?`OIFl zWryPiJ|X#a&waXRYgB-mci`q#vmax{z2bQ#9Cr9 zu_{Twh#ltaOp{>nOeO=#rV{Zc=8)F9pPXovRfOo%2MysfDjO4oeQu;F=tQf|Og+;5 z={{4}<;DWLSe-vK>GcG%Yh3f9k|3LGN&LvAwrRM-+B?&!M;2S;?0wMNcP4W-eJ6f4 zFp~D1pkSBW8rGwobWV!dv!fcdFQP1(C$%`zKRfZHh`szq6@|7ExdEMO_~Jx-M3cq4 z`l9<^j%l4ep^;;q-NWdNRxA?0S2^S7>wB5!Esl@dS#}wJjjoEoE-}^^w5QUh(Tl`z z&u~eqiA%|=HOhA0l1g^&(jib+e)95jJyQo6QO*F9+8d3v?MsMx%k|A?7$Q^3o%lC+ zI2@Rmfu<_!cP=Y4?9609-z{@kTrJxX;p9xyE^}zAISZV*EgxE?+B01_i;IhPrAipB8g)6Y90jnKw?L*?id+ZyV-02IY2Lohd~;nW!w*kWQ&3ckzMW-M%S5gXy0W>FZwM+jS*?XnLV`OAJ`t>w{H_(sN+W|c+_dS_2ZjL*=BYL3? zSEnXopFMkan2P(gLyl8-7MkU{4L&Ui4XP)M&r~bxL0y6ncZ-iO=AeXo@%3vxH}6iU zqzo+-oNbBg@L7l1h_ef93LJChO=5f9y8vit!n4Op8lLN5|cd zFK;C?7z~K@gu9?}h?Ch|Q(tVqysxfKg}z0tVVDccpe8T}7pkmE1pkvu1?@nN#c(b5d{H2Nw|CXuyZEHcBhf4Vzu;{O+fWinOSh9%GXMi_ znI2br)-Ek#M%u$Dh_OGPvQBghk|}}%FoaolCXNcd!}%)mWB*3Za z;ga4iJKH5m%cq^Jfzt3;Q^L2LY<_>SpR~qH^TEPx3kwW2@Q_3H7H3LX2&s0q_dM;y zk;9){j;g2@M`q@a46*ha{B@Tf9MEtY14}}LygX6x@#NWtJ@ZFJBu0sq^Dq8&Az+yS z3v{%58|(i_GbhM@*t_`utJ`OsT$^&|>xEs?^G7Bdu%P|);4TsQCtLeLasJz2VB3e^5HxuK-!SC>**jFV%){fkXAZN4r z6U{#escha+iJ2r~J5r@PcaV_$+qIsg$iC&xQ(35m;<1k1oa@gwf36-E;U5<)t959= z+Hf`AOW>cx-+X}#SH+y15J3_~dB)wjAh-;NfB;B%=ulLQZ9PbBVrv7>aeCb(P#eV~ zqy5Ep7kPMigoTR%t6tQvzaPM7+Sik;c2Q6liQH;JNvoZsy-o(=kMr~Au0)g{j_9v1 zeyam4#R_X1J(%!tVWB%0%4Z0`O8J1)93mcF&q^@6& zR0Q2)t=qIrGhIhqM&?ynnHa6Z{D8Q!*S&fWekHD6-G`5V_{8}ExG@`@RlK!hSMWa- z3`z>^TWsdvYD4(?Y=5hf_%u=stg#yP`$G;APPH3d! z;bFfr9TF5Id0JjwUERWh3oR!j(*v9oaw^jv8bPb^tOil^6sW5K94{y1hWD@SelPbCHPfE*w18_yH6^c%c^*#SeTIWsW}wNO`A*R;2=6$a76 zJN9wxeb>#+P3;o<+o4yi=lXi#^nrna;NW1;9$)D-Ju5!PFn%d~XLGJBEBjR!3NGMT zctt!$I}y4XpIO{&m>cgM-~zrIq`a3lu{VPE+doArNP~v=qpCn&sp;>N*ZJ5l8zx}+ zvOV?`Bec}l<_AegNZM01bwf;U?L#3QtK^?gwWp;i#vkcM9jE0tb3(1o^>aRTtU4xT zh7jlukoYP-C6kuGCc z01IJyQ6)_9G1bKfL=F0f7;+Hq_i_P#$sfHwHq%>_7r)S&ZO|-eJ$=36WK{^5S7XIr zD}Q%t_D56Q8n2RzhT1}U8C*{<$n+jOP)H^_apD9WU778|J%gi}kaA$CLHEVb&#^fm$<9ChyBKdVVBac_$(gpI&gf$%lJ ztfSP_8W6|x^YaiVi^!af%w7=L1z9*ay!S_e-aXZp;`g_w3Qhurn(pb+8(|ejXMO@U z4lyw?dit1zgzH+nqo{*dC_!ca)G9eYAJ@YIM6$)&_1JZ-Cf>NeRD_q;`t$44Le|r- zgA$vkuuG@^xiaE3Vx!ts=oIFUlaORQYUi+f=5SPdy%5&m%a<=fS>O{8umj0gT}yug z8c9e0Stgpn@b|ntOs#rJ;tW0g z@bEB1)Y>Mi`921YoC7j95PAP8t>WvPJ$Z-6q$k)pN&NZ#FQSeN-jS84-BAU_4!_jZ zISG={%NH-MYpZ^7qh~T_#vQ}Kf@eORrB9zghQ+u9yyAC07PM=V1rd;J&39{S>(wiw zAkO6bl_dW8q`0q?3;mQ}FVTp*OV8jb9xG@6O*MvcPPxM8KUBz5r~c); zxRT5!fqURxLnr_yg6SK7{W)B@R@2Z>Si(EiRV&CDzls015wg;1nY_G;%9T;eb7ZV7 z#IzZb?o&%C}?IVsL3Q!ZV4~a%c(u;I$HSdMDH z!!Zg=eXGZ^0klxXQ*VNTg5JFO`u;ZSUw5b+LmdPkQ9&k79TVN0&dQWYbLT84{BPIp z)7M*?B+F3A2eNhCoMP6BOFWH(l=D-r?Y7N27!_Ke`Z7j1-_+LQCux z9~c@M+S>B7w@qMF&uK2AIm=`OavrtE?Q@)ov92?04-5!sEwVAKNmI|6)b$aup6wCn zt1q@&1aBC$>Ds{y0n0K2X))cA@%r`ANtZ}Y=Lc#Z^z?0@jHKVa!ZI||sMpK`H8h97W&i*#Kkm{=P(`)0PNw8GH#PbC`Ke+5RKB)!vM9;lkjuEwY}u z^GU@jTJ-6L5j5c8MKaIiJOGV2!q*qF?;99kqLaeGdI}?##sqJ9)bl*3JrS6;I~>8m z`H!cR3r~3XzdS-)(@%QK1u90Ple|4N5=nzF>G}iZ&mjA-kgP~FvPmaA4*V2>mCoQ+ z1K^aVRidii_-ha(XY6B#2Yh!I-@lK57JLixIh~lpozO27LooZKHW^FU?M>7I8GD`D z1~`rI@bK7Zfk^fxyoMYBedR1GKoYd|O(7v69K%VT6r2k08lm&(=;$aoHBlz_mnZv>%Y&8^tW78pj!8&y2!_Srmv(3 z`~(#h6`)l|JYAtgj}V#@5U+8*)dU1WrJeD@D2RO2;TQl4{q>e3@FGptcc6^*<(c+t zV=+Ognnjs3>~$8ImR~uf(Kl;sT2qYyJIr+F5fc#HV@#2c+9Ng(^0mG}Cbac|v_hd< zp6L!cb343&Y4gm(K!z4UXUud-3q?<9{BilUaQwbLY}CX0`vA{ zWxBwAnWakQ^y$-Vew<;FUQ|_Lj;#fj`g-S2b%*g9s{^NCz7wUlT^}X{FsL2__-JC@ z50&7IM%e+S4rEhN-OPB>xNSL5a3Bmn-bx8I*lI@Qh2!4WR{)c($$J32Z#KziC!G^#PE{ww@XR*ZtA7onY! zDiq5t4W%(l|$kX*3-gw9u8Sw0A-rs6srPa(c(NzD?G`Vxr znH7=t9XFiV;l`U6_ziGCbCQbd{y_=F#|Y$$ts}X#!x85Yq6dC!b_3wCn!v}$2O?n) zz8HA*j$_~=UjaG$(e&yU9VL{}-;$)39s46! zk!osJgIs$s0|&DZ<$X2hONT^vwicmc^bGcwec!#5&QCwY8kdm3L{CpICZ_!zHzRZi zKmBZcoXJ=gyrwb?Ouw+w?*;U4O3e z+v28~o^Tt`D4=CER;2YVnk~P?h`o5+bD$V>3Rt_4@BKz8Ko2!&icL?K51gZ|zz>dw zoC3AUZwxm*PB{~~aok`Epqj`u0SvZi*&q@W7ABjtRa{*B>eVaI55KVX*3Z~QK+A?f zI&fZ-^X4t`9<5w*ttAPhmPg~a`Y=}XJAU&a5DQq*O2aEyQf;RNayHdQV9j=^j6K$r zh~F?vTz9Afs6pR_m@Hsyu<(I#X4b+ksDG#=I{@+$6B7pq2Om$iga}xkL&x%L{0)8i zh!YM$*5EU2VLE^QJTo&hB$H84;}O1dlnMwkoNdZzqvwO)iJjdNfxC$5IF3M-i**bq&XQW{`?^~NKE5W zu@o|2nYSqhi?rmSXqNxRFj8uVS=G&O@DVsQDE}inVh%O_%+S03Tvx{qQ{G>;1C}LK z?ApSxqJjd`BtPgs0~OEJ&at~dHnNRYf*6D@!AFe2g)R^#ii?HSF>xpq@bxSltn-_U z5VrGe9edPPSy`E)k*8H);Sz|2^f#I&nsC|YqzDLP61Z*`ba&E*4;-Q4hmi4Y(r%k< zj&A_?>QCoR!i_#=7>43m1;n9Nc-595hn$Az4iNrmYIl^hl=j@xWUD6%U-R2CY9Rn^ zu1HOnGxf&%xf5<2zKnm3F-X1{5Pd|7GnnJ~?9tLG{2b;(2%6vMQjKuwdzG}lrHN)A zIx&vASDv1_rYEmM4uwjqRtO|E4FNKL261jFz%8I=e0!V>{6?` znqM-|hp#b`cDFpq**l)RoSvR;Y?LS8bL%M>rH#8<`uihN$Clf*ZPp#Gwe7;sP~T4~ z&WZ^+0||rRR83RQHTu#N3q(h3YksdZVPWkthP-N(pCy?0h~b^Soh_;H8s^!129wT9 z&J$F?FV<5jTH?+k%zjJOmKnh--d(7FKY>&|Oi| zvNAF>qDb4TS6^U+rh;Kru-ty1o{a-Qo0Z4q0R6~^ZyuQV@zBs>5ZRjl=pT8|>oQw- zTASVk^#`1vHR8i)exjF8*Yf8{&o8r%4#@-Ct*lPI2m%(ZP zv}j99OKsah7udOxer6Z3es~3T1%H(Ei+K4*6}LX#R-i(iJ$qJOUW$aaf$i2Dh;KjC zw{fZjS_gul;W%DV!}b`O19~^zYqlF6H3cj-Xn%FYHy{L~<7of)UCgB)syyViLF_dF zLlsbXs35r}y)|5(o}RE@95hgh6DK-=iNauJY*F)>yrL1{0-aPj8j{3=kZj(k6R04= zpy+)&bsRbP8B0Q)2_)fVpydJ~kP2XN*#&W|PfSK@0)U1<(jE~YU0a!GX5{9EWhBPM zWdQ;g0FC6&##xXYmhC|<&&F1*QSSrV;6C>xi z;WzL&P^6GZKJGuyu4+RfbYk7y4sLWpt$_ilL6eU7k(V#L+L5F{^!!=|IFZY70@2ku zjO_vW43NK)5~*hpU_&Ziqu|icnm%nD=45ud*g5y#!ry*~?n3~ybz`Gv)lWi&8 zz?C}r$UT0XJ^-hS{W|>@gi7m=AiV=!kIz~^^gE}E>l=P}<$=FEnE+D}^4B`vCc(l` z+G5Q8CD~bleX_g>v$zNrp*yANz9f?JL-1Q9u$3Mk`g(7V{@b4}zuI<(R^xY-L4LpE z;Y0wBfAe(i`Ym5>0{`tmUiKw>qqr{<>z)u_aotO$X<02jHaC2c(_I<;ygv$ z83gZX9R0DGg@!jytrKpC{l0Ll{En(8qT>Z_IQj%U_wkY!5W%NrY`tw~z8g~+dm@Go z*610Ci;LsBU4(=v0l-Po@BVWVmT@rK{h=aAA2PDChlz>fuRN%K_eC1EIQM{|4(#`_v9YzaGJ$Cs zLId14ZMhI@G=H=E{%DdOpOp(DA&plSeApNXrFo$j)WT9s4Xb}JY+nEz20aUA%)}3z zgimlCT14hxJ}PCEHUiEnDjGgSnJZ*AaLHhkVNyRy2b3G!6rL)_~1buga7^@;s&7n;mlI*pgKY&^3hYcKg4*e z6loVIHvxvlFgkP$tpREF-*q3Gjim|U2ur(b;7f&SlF7~RFbIWWm$pGI3*^*L745w_ z{DN^WP}kp_)*rT+-6Ex4px*Kt8}=6RFo0f!+aJNje5nSF_EXkv*>l1`RD#Xj-5q`} z!^h3dY#rsy(U7o$^%!Ep?w^JfyLA=n3P-ep;Dj^Kx9ici~|< zpK@j~SLp)j7KA<RZ+X3}iD~#RWz_u?YFhW4P{YDVGV5cv)|+IQM=5`ZJD`f< zD*4tgRb}+swT>@pGBcnSEKx}{@D=k4TV8*(8 zdJ+;58TA#fL!&~qR2@N&)&`%Zj11A{>j3GRi$Fk@Q9)YoH9d}P+3diCg3vL}H8ea7 zfnO_U1zPAEddZi-L0-J54HtQ<_g*vn(=04aM9=ADc7)MoTzYy8!p!#)hsy#wHn5_9 z9Dr`Ruzvl!7ccf<$!2ihs>dbG-3*~537{Ezg}cfF?hwDz|1~kTUU<9Zj9@GOm)!W# zO&T3qpnpLAU!ubMZY4^ut|x16!k^a*Y4!P`rpyPkop>$$gI^E>mVd7ae`Tc;*Y2pd z)rtr?{Ub2In`w$C-#HmS=LSWgt>v*#noxtTfc-hlFsp=pBI5oobG~`1ybQl zk|19|pFnW8wvcwuPWFV;!qM`RKN?w1);IITsxG{Wv;t0epc(pf;MoBvl^Ou4@Kt|K$zARlSe$1`ZC`#;7YG*VxrILw@GkRwqPwTK@jz z-;0&WFl#s#TK9lGj~_dBIRw`7cQI(m85fJ$)ha}eVG_^Cx39Y4eon@0Y9`8TXS!PC_qmU)e{ZA%31GPm!ZgSe_wo}4hF=rhPQm2(AU0GV3942SBn#WX5-otGaGl5@u0cP~w@q-_tKuYCB zC#Dsy;o)6qHs~yz=O3vpyaR?X6!{v5pzF*AHrv@o<6X7c#M+1SEBw-5+eZAhdwFmyv;iR@nA+s|q!% zAo7=;D0Tz7PHcX|`uoxZ{v-Wu6B=)!_C6egwRluK;Gi^$bs0>@C?KT5Wxz+^=Roci zkzNJrx^OiS;=qgY;>%IR5vVMGZ^_*Z;X;A915QGyF5sJ?<25>gjxW~*(-QOuP~*|2 z{iV(_%pT*wIibgi`?(Haiy(t(7Fb9qpB<-=2D$$gc=G{36jQ;VWHCzLx(5i4O$>}E z;03VaAc%n09&QhY!naRe)XZG5=iOT=`OOAEHc_Pq4upCW^_p2kqy$(bNM`Zg>Ag6U z|L!;xf5%lyV(jef0syJPa9Q-gh4CrC39*{A)S~Kq(E!rvx=~7K>9ou#m8v8v@Ppr&k{~f)M z1Y&ezKu`q@V+q=^c39XrQJ-`R@$os0RAVYvM2wCTpL9(SX9EV;7XG`tNai&&gRNr~ z83l#nsimN@EflO?HrEKvPR@-RnnK7mGr(WUX!L*aIVy>xPE>7ZAHeA+QH)H&dEV?ChSm(I&!S`2H-{)!tjV6_pMMqv= z$9gy)4w`d0;b9D$lsJpd28GA~mIcavs^KvTJOMDtY$+&hsFpDoVf#gzFUB!O5L84R zgGrt_HU{$V4ZSF(yLV5UdT@yTGBa)Y85rXE8mSm3w@haFd<3V16HkGbBf_b{oHE4B zS%KaBASI6>>CV<|@Wey(*I__y2mKSmHa4Oxl-HQ*cHGfX0DRyvnC>ePLeG7TsSX!; z0=;mlD5dMy-A*a82noGSb%ZXs)g<(I9Tw~Oh{d+fvw}me)t5nfe7ZeNyP>Y`>7WY* ztbz|7+$&R{uJ3@!KURPN^%yo+)QUQ`CMq&w?_Ml?g=^yNlhB_AJ5zQd=%CHBTkDH< z-s(QApm9 zew>PGa&C@}l2YLQ=htBRQjX2ghHn=_-)r|hfN$M63?UNcd<`pQ`0?do*t!ALf&jSK z5vjN8yQsAm{O5mr7ue?$WiCI314hAwJD2x%yx2wH1YBBIIe&HB;NZadlWC`0PVD+z zVY%*#0-tS3wINy?LM}3%KK;y5LTHWP_XS?}oaaUGck?R_nE<-Rr}PSc1`*~WBtEX*_UesG!_5z!S}kn>-c!8PQPFNuNKrUi2E1t`h%hW8BhlD zST-Di@z6N|Tit+)|3tv>(Vws>^e2C8#)K04-_bCx_w^l+=4U5|Jh4Xb{9ZkO0ULNQ zDGv`1E-o&RPDb(V&EQWF?bWey+fL-gP!`fheem>X&&}geO{6bFd|B(=I z`%J&zJaY+x9YV*`+xy6&L+);FOhp6lD_cA9lK+Dx{3dk(v~7aTZ`qI9y+5$jyz=m1 zY35UT^#@ps^He((R9+woz)&bZ#x{a4<_Dm~4J!3_;`4DnxP}cdEPRws|6`mJvJ(;> zLhp)Lc)lF>t6sjo$H>XAg)CV@Eyi@gnTP>0+^K`Sr9-$~+(eXIvCvF_S2pcPKfMb+ z5hcH@+AubTK4~Ygf=MR5h0Bwzn;>K8ks*v4{vGuvzKV?9hnjw@j6@dWX5q<5=gp?sFWgKEL1h`906`&(ois<39KOe!uT)ysp>vy0)^g zPt8jLLL1}I7Y6;2)h3}H$>*Z=cf76LwQXabp(#nTE-++}ixhR3@M4Sp*_6^T+4e@i}7;O=+`$&)CsE;t(;RJIqw0$|f{Md7$wqX?7>%^|7f4B$KV>qA6m z2R%!9OTaP!NR&q_>y+=uZ~;!>h#Wll1PYTKAoT}T2B1wYEG|O01?Ad`0f5*43^{Mi zLQRq$+!hVZ*(snmsI!*WRUC`xlp zJ5L1Z&>LkssRcNN6tQn^=<0SOIi*(inXWI8qX92Sy$TvufzB>^k2A6MJ*aTWhbv!f zJqzU{KWHX-D(C2kqy;(lqtO8Y#deI&W2aTzRw|3nLtla@2)xsJm>V~t|8{a>BHk6x z21h8oA@UGed1{k_=3)sz;!;W0UaI{>A{$crH}?S`!7XxcY6*xcM040WVG0SAIL&m! zRAA?wyJleEasNK(iDW-Z_XltHmN-x{7x0U&++}9gI_pzhoFk{S|z(AVG=O_JFe{6yd0}&%sE+N5#j~(2+sjCnQKk?>^UWe@)Zn3OuoLp z`M^qpOdjI5TKcOy$9ag3F5Gwq&E09lY1--qff|>zb8e_ZHHQVT{xS)<7b-1vlN*2Q zHI*D9O`(w<|K!Q7Gp{~;IHLoyW^O>9$CtKBAly=Wq49+I+w=Eayu6AUCGicss>zZ3 z=yOT0AnMF8Zx7!qD=P~$q^n`ZLHR;RhI{MQpe-dKUbyU&^79cc)CdX)_yRR1ql`7N z23&ZVqXgKOB>+-UBKAN>*H$_G4r!l$&BfjQHJlk~ToiW^4$4UyDs@0!@U2=Y33*rW zas~w0&Um~5T!5~g9*}}47#I|~ywh8O=BKBt+gu(=lW|Jwou-!7d3gv=h_-DzVe#F$ z9cwVE^FEG!bn&)F#AD^VWITPYhYojXXngwg#9CJBnYDi_@$>%u58n~h%M8AHnWRPG zUp>wr+{ez5%1pC0$UQzjokr6~=~U{Hf9_!|ly1;gjf1IV)7TSV3Jw_97l_;rv$yYG zbd3g;wt~WzFb9KTSUu0K-DLnb_gJUG84M7lE*r50$Dn^fBdDm5MiR z8XWXKdH$p4*touGhd|SH(gC-*M-?Xzl(EG>`KK$E+ZF_to9UzO=u`! zav_T#vI97{yn@2gfNCLRBi)^TZ`b`W%jW=+(cLIM4=-ABK9?3LFTg^WUI>E*k8bIN zRq$MLwhHirIvwOE7B>R1ZxHF|IgP6 z$r@?bWXGCPDXzFk_3X=X|DXh4jiu42P=!3>0EDtSI!M*NsBS06`#J9lHcO&=aVYqg z`V-8n9Q>1&_3GTNLY3U0I#4Jq-4jXjW1s2;p>xmJ4t%He)Fs(>oLTpGn(F1t&?C}G zn)ubeCS&g0q9WtolP~eBx%Zc>hyAwL(BhH@o@#kR85tSCdb=v|=3<9Hqv|sv*yH3U zmVsv#h4YS+mF{P~j+&iKOBkgaRr~9x zxE1m!j-R`tZnO6t!b3#-3BYJg&5Zt@&qt0Me~kyUKur?@D&~?5r)P6156KD7Ev@p5 zb?~a66Lhyj9U0P&Cb~~L&2s&*Z_1%PMHP%Zko3&<2t6Sj%)5TPxpT?)vMo-&TzX0B z75U|=b2sj{hqktQK_3lv$UvgHy4uIjPf<>8emb)-A4-vf(rBvbtm+V6#^cu?IMd81 zLc)&Cbeqov;$U04+1<(lFsW<;0vRCUR6Tym#l;0|=-|Kr*Kj}E(DO^CU*na4M3eqb zc*AXE+xaQG4XiAqe{a<_7vK#`%odSCU6%8lPk4AZym_3-Ss!xhL+*)<_zHfXg+|qC z59@hQG*Y|EDj$AWlH6d#C!RZmOI??EsU1A9d3GiOHFTWnQe*!?UeK!s8#L;SMS)e-;m-_0J5k!o@l7i9%BswP@CZ5&1 zLerJ{+v`B4^gMtx(o4s&8;xZBAgTYH?_{6KEFnt%b`0$B%s>M~1y3R7gq&1*9%$oM zgGrePFS;6|Tg0=%J8#LC8o@RcJA zXF0#syf^oy%&om{VBq$T^*!GSJMQO3 zk#Sl_M+bhtlm*T~NNRrjk$ZX1+_2||V@iraq$mXt7F|-T=xhgXR+b}hSV`Vf%b8oa z(o9g2I?!#t**ZbVuW^R>Bt>tS=OwVIud`~Qt*iU|M>ehjW4_=X$^I34f;XqjZy8w9 zqa1yU2;IQYkSxFn!*t5X=$9w?q1Oosa3EL}qn(?y?P-URP#nS&sRk>cz(TE()>n5) z8`Acy79cS}$BtRL5A7I~a)4D)BI*Q7j#dy2AgE?qWuh&b|N(bm*?&intN*#6X7lE9Yc!`0eIVn}Q zNu94=!ge4q)%?2-a;kD~{L)SIXe(@Y@Qwm#OGE3Fl|0bPnm}%XPp=FJRvkBQP60mk z?OW92c9slfnI28TG4fvJ|>O&@`ttf>Sp_Z;EIlhM@Q?ZsDSbdla1c#)3?X1WS(H&hC}^R zFCQR|iDKd-Y-|PqrIh7(Rw?c+*{ycI%GXvYzJm5m^ZUGf{p%LMwnJ%Xgs1YH0KDzi zZm`i6vzB_mF#@Wb^v=WYsDmT{9fS0Sx3-^60wY`D_m(SHKxIgn(~dH&VDIF7M0n++ zYv0`};9y|@y??L=<7dv`KU*Bn`Nb<(-*OOnwBku?ITqUpG&9X_L^yGud@Ykt$ZV3+ zkgewee~i~c(}TXN`wWw>NKLUY?jqtjeBrjG(&_VV0M6=Xhq3R5qg;?K zb)0W}&k}#!b4D-EJzx@y5`8o(+6qit(xBSx75*$aS>c`L^dW@|INbIfF7_%aDr2O* zv;%{KA~$|sN%Uw>(l)Tj8!vkq?RZW+J@WpwOzfk6BYSx+(qV;4^ZCwE0RVzVT1`?Y zIb)~yu>_lDI;DPOY&;<5s62AAhtu4ijzp3E?QSWI))=M%+Ds)~BhR8x&vbT;IG`wM zEQyF>;XZ)AqA4kPC-f^=AbMYfqjls6`Q=BUHWn>uQcLGCz!m~%HwRdDlbKc^CC*g% z`Ox)AU`+G34qxvAf)O3)l9$(%?9Suw=RS^tk zy&Loys1z5veR#n>xc!b}1bRW$j(f;cN;UjWvT&(Z6ST0nnu$FXKbfA(8th^B@>-?~ zcs2b>W3tQVKve?e!fq^TliThClEX-~Gk{IeJAsXaZD#)jWv0j;kCzA1SgstW=naO` zIFnK`%Qt!zEY8HtQHXVzIZF;a^wcFsj20p?1MMK?<>jO_N1vpneKs^THs*jBh@JiH z*|Rk89zhBB!F1u`u*FQ9jUv2Vp-Uh%5(fvB49Wc3BfKavb(KTcyZRX2_lfuqLwT;Q zuFeAPRa*MKP>v~Sw2uTZpMfp_cj?b3tV*=Phr`)AH}NFKu~R`(-3tjiD6`&on;BO+!f)wLnhl?M-YG*Y1-6aaL?BvsD%} z6oCt>*1qRlI;>FKWn=*wmrIB5t5-Z_kKt69@{m}#s;e7&(}mITCzDl??=*Pwm>DcO z)YG%V_UX%A{ihdI%RP~(z@3QzVCe|Lb*0d^penY+s+mQqhDU%m{=1D0Rp1Eo^k{E5$>Kf}IF-(g&MzwiaKO-UD=_hB}+nc;6Us)chw0e)}) z?#Ga5v4Roh1)4%3pSi@u7IQlmd6tCa)<2e>i{%%|9brSL;FN?WFh%rb&8g4R0NiIbdP1nutZ(-V+4s_)&?7;wL z1Lwxa+Z*~ybe&!A?b|E^v0x-F*1l=%8HZXr=#v1HddQ#^BTm#zEOJKf5IToK^=uvF zWR7`%Npe5S#AYQeS}fzWNeHrq$Snh5yLaM((wFyz&QT0Lz+x|tt@)^F0E$Wn4p}Qe zo`d_w7h@9>P7aPUu2=MLBR_w3&jIrmr3yl@`xX0}2^UO>3X~`@%XgyQD=}Y`^w6}U zn7}1l%h3VuxmYckJK4!!JzaTdLKLpJ$13pbKHS}X{nQnF;NH489J!5WJ8=(Y{L`}f z;h8@o@$s)@GG6?DyFEy7##TREw{+p}y>20?hypGsU%CDIU65?R=0lR!C1O#cc+0b* zW0qB}XCH38aeve=-*_BK{}2$?gxn#Aw8pdIQgVLfYeL$!=34f^p*(Togob7ioERmA z)pcq5ey!n;rK{gX&2mpZFmjv!fi;Wl6mWStR3wP3_ep_3NVs4-hhjmiMmx*$sdLtqB6pF|yi19J!NCt{_+oQ%G?c}`U>6J~=R$~a z`WVO%fJ#AyM{p1#0RasOUyqj+M_3fJB}(TOwsZ?+bX|j5B@;e)k857%mR?Q zSU)XzU9hv8zP)98iR0k$n-+#2Oo5DEhwQZi0NVoP3L3?j(g zL_>a|0Rhk&Nun14uyKE1AKjqc)MY@Udde?7_Vl){R--QW_45;KJYeThVItg?7WW93 zh^@`jb6-7$Hw!tyC?F*P!Hy#pX=(>58?A5bF|XrB?Kv6sJdJfxB5X072?uN_e}CA; z3vFF7VooqC$xB~fKTVt1p#4+-WIc=HzFvVFDq{qxo z%)8F-+0qq@g5$g?7TU6CL~p)PJHo*M!d4OW?8MK)!|5ikZ_E9stc`~w7?^48po<3? z5tEzp(H`<)@xr~ffeTxQfVn?$3Jw^PL?JQe(^Y#Qn*NAj^;f+0>gqu){0p59^-8!s z2=CJL>tm(5yMT@*W%d?o#}HW44BHVsct3}X?Wxv|} zis|8Aqkq``d6*Nw>I4BjVt%}ONZ0yH!t1_SMjHmFtUyMdzc(J~)hqAyr&~Q@0N`-{ zJSx6=nRUin4ed{LgC>Sx)-2VZsVjP(m0SJuwI@{cWbv|fPm!AbiK<^?;lX1tdvk60 z0;-1!=VaInmTmVyMg>EZr)S#-1OyuE*}ZJ9^Ql_m_L2K*s-ekY5hDSvLYzc=6SLC| zW@c+2lc}H;%p>6VewNQ$6}Il5(zxcQKq2-oYqtKgT_v4U*e=F_`z!kvA zGBZmO=)C_%hVAoRlFT9Y9vn=t9A6L~Yg0V{&DegoB?G9PgMSd{+iQ7)Ice1$5%9g` zyS&?J2;mU)drxPixB!#kq?lNHZZ`+nz)u7*B6v6)mPI%nm9)6i;eOKC`AQIQK!So; zT5YVYMY)sz>8kZT%eZc1$d#^j5&poliZl@zu2B2tF?sPMi}|B%6@1OqR;l_bt#^QwlR=MG#jH_%9 z0sdR;L>-lZC>r{i)pg0q{cY9+HeWC${%19X$lc>6esB>LGM+_kTU~R&7zq(VUFWN( z_(%N5lVcW(Cig$R>JFE~giyL|AEfY}d`k_Z!DVITuZ@iwTTnd=tCu8fBNG1LefYEc zf9~7gqmhl#&0oU`DU|=cH8IE9U8TL zGl)6X-Y>F{1TcElh%^C$48xkbyEW|4pxgN!EG-~e6^kMcB!o!2k zCw~U6K7TSx^xP%3mGBMsfCCxOqzg=evR2|KQHL~W@&gB!v2Fhqm*-nXbtrPhs;9vb z+77o)0aA;8C=$C8plSU4Ekrt?7=;5U2)B1DzTNb*6zE?X>FLE~P-=iOTPUAiVp8p! z0&gRdly}87TGzz8p`fLbtYt(j{CwqV;U-=$m%ieVNB0#MaZ0&JbV`)O>W8nOI7rbo zsu-xDOZh!izja;bImU=gd)mjQz)uvl_N^(oL|D};#xy&qab_XcFw)EP2ozQ18ebtEdS-!$UlVR#pry|FVh-REac{cVxEPedEq-V-|!KAtb&E{ZJcr{AE^F zvmtdx36x6d>F7$@G?uozPBNX7laqNsqol2^t*R;roWR_X96576@#N5y7-8FU;+#F^ zMaf*8SL7y74|~>}J9kdpoK*!#D&j5XE$0_phBKN_8HZTsq<=saB+s(z!+WBbVo)SJ z3h0ZH4HQ&v0GCu+ucG>&+7m;!hjdhq?w0mr;I2JqDgm%L(7QnS{5qgpWk^>}YxBqC zQ6}}|*YO-uyd;7U<1|B3T@#W2`?DMzc7)XPKst9z%M|Bfhkp=Q)QZJdGD7kEkj!o+ z%%ii6IP1A4NGg*00MWxo?$6L#08zjL+tjeopY(&VWRGoXpgRm2n;;scCEe2}3G_JN z8+}ttNlL2u_%ZNXs2>te*tk$yXI@barhM~U+n}c8IzYfj8v&e>#1u)5JwL9pZ4ccw z=Wrxk`ubHl?hy4&5;4c$JC?q(^yqIkpr1Zv$D0tQPvZ>C*s`4F?<2qLTu3XeFN1%$ zW?w>i)V?3|4isc%p-k=5);w~`j*aTE=w>Uf$)`1JtagtP3~ukQJBa09jm=K+XPp(Y zABl7ZJ&wk%Vh=V})-nN;FE4!C&YSDG&O)aMycs;uILpgB8lzJK%O~8ewg%H%gf%U_a11Fn7IbWN0!$2N;11V z>0yec`RB!bK-iFMbCXharWMzvI#64Hm=YKq=aqNa+S(rTW=qs%z(Qrb`c8OU>=?vb z{-i9`4CZ(Mt*UMBj#jf~?aH7xn!37gp-M_O2pjT<@oA{UH4(?(@of=8b*o|T#QYh! z?O1o>rG+Xo=M2f{q<}3g`HB64yFch)A8~Ej>+Fgkl5j#rL1fNa4~|uo+SxvxYEBGn zOL$BMa3~|pb7aL2f8KsBno8+U<3$FHhlEJfHuo3N-Cj_Srj+^skQCebP%=ARG02U8 zeks7u?@8-sZJox#0i$B#pFKnES5jsL{a=5H59TdTLu=dyH9H=YN{*ZuO71z=%>BHR zD$WW@DrJJ<$=Q8$7|JL3UN)deq(S;M^ktz9Y7Sl=ilXCpO|#$IgyIA1(u6BZOP4FE zb?x6V*_&LQNqcvL2H>YDvBTB3BKh?0FDx~Tbrl1UWt2`YB4OR*8UL!UF2;ht^+3f) z$(hIXkQ7&P9!yqd|604Y7Zj3okCX0)B19T0S-%nnIBZpFv<%?2>q1Q>!f zPEH_G4g?3NHXPFA8QTxTz6#r+D-Uig_Msz`U3|e>myVcnZzrxC(Kq{b^o?lxpwrpl z%|~9BgQ#D=)A3YhY*BREDT>JMIq0HU+&qsv0>?Ob+Cf*NRR3dTC3%z9JHX*ZjvV<_ z$rh8Cl7eme5?Q|z3hrT1^of_S#f1v1PHn%h0wNL)BVrPhbdX-W#EU$ipgkG;@pzq@ z=7Fp+oA;$#w1xP%sJYZGT)xagd{XHa0+;376I%_Kw4B_OHUJ2lWh$j0gGFY80Fv6H zn9f-?cPFa~2S_9pMQdt*D zYH!;^e(IzhA9MUe63fl6x3lk8()9|_>;YzRKE#g2u92(JfQC;%$-|ZC9)YUx(N*ju zs~p$qL@=Yb0HfRBu|5#Kr#B&kssh~@a8nwZchqcx*mID2^-kyQP=Ut7P{I}fA%Yb> zD=W)4@ciS)kMKrA*@!j<-SxFtDVDti7qA`JL4b~aF3^;Me5f_R^^T5n@`CNxFiVsQ zV*6RV&)~d4$8Ef?1PrbA4tp|C=}=bsOYf`xdCBl_uN2eT*mCsL3S`Btzkp3)RfzO- zJ4yy$e5~m#dI@UN$hRe2&f@CbYc8zu?A^O}0O$4~kld7IU|aW(u*Y-BgiLPrW-AW; zU;B7%p0{TCCUzjto;iE-#WSdyHmIT~)MrWV5@PNi@<>O(5AWd;w}LIpi5ok)!&dxi z;Ih9p%fL|d$|DY?gwH-i$d(h~z5X(m16}M&6xM4Z<&D2$%*IojaU_|JT;eKYT_C~$ zXu3!+BPI3+3Fn5{uM@Uagq&AZgQJ^m2)Az8(;BarU#g8)%>gq@Z=UrOx@tg5ft`m( zr_eROencvJ?+j@5$bww*_gwoFTc2H>r8_e{{S3}Q@xRsN)pGpWz5Wqy$H!X&kBY~9 z9Fb-QN)+SLmQD)a6Py=)tKxKEydcpms)dz0;wywFoP7;dcKo+P1@FZL6 z0sTQhuExgeX<9~qMx;jRqreo0+6s8Dk>=DNKxLPhA3BaHfxH3Kfq+a-%l$Ze>s&Q@ zX)hzAMdG&ux4VlG z#B1`ALiL7`0wyZ5vXx!eft3~^=Jc-Kd2UIXv!TjQPJ+>WN5eH;Bq5wq4SFaV~3M`CbZ z0SEQzQs633Gn>|%X9PW@h{HRL?VWhEZ`o-$a;M3>q$$NYWwA{Jr;PJ+UrqeQgiG1i zdDzV>9u~J>IzB`7mzP&>6?0N_CWU$wJ{-XLGXy(KevGr`1jO!dx5$BiKEfJrxCkW_ z<)I`7<$)5gqlfdTG?H3S#Q&m%QfZy;@d?K93W$=*w zFy0-nTQj!Ui7g2QH7l55?4!SIOSFEZ=9JfHZ6p5}}> zRT}w@T$koOT+ElzM}%VMWS^L5uOO#?ghony0*pY*@Zl|B*8~v>PK^%=EydHP`=iJq#K z7MCXQ4Wr$b98T(6{3Y5Fl{uDF?unR?5Ci8^<7M;~p0@SO zY=giOL1s=SCsR!>!H}j7+a~P^FKf0l(3J-s2tY;`z#}308V=Sp=W87WW*tZ~Kqd$X zMll3d0d;BLzIT~RHttPRN~GCNSyBbHKZA61XJxZCac+C~J?9ZfX+ay9Jrgupi-5Ud zlxg(@;|xSf)k~KSaU_FYPQ`1X9&)`X(p=Otwm%~dJ^`2#R9^mo_K=G7!~NMXprwUp zJ!r-+!S@VM-)GOC(+)zTDh?|H?NWvb^}b)5i_{9=2c+gw*yRembs9nN@FWcu6#&Ig8ht*TXVn%m!^No4 zx>%IKvqISZbFm`BVbbLjz<(xU5-O)bo)${8dhLl2;q`gI(tuhYtWGmz0>H8C`64wB z@ssZqu--nkF<3i!+JGXkFo4!=c=rubuLKk+-*f( z=eJw}**S7*87G7&0OuU`sPEo-ei)z+-D&h%1c`PSPp*0#kpu$)K#m1&98Qw1QwxuG zFf^_p99}lI{(2e4J-KkZ(NG?Mm$%zl_{2U=*n{I|ZubRH6R82UUT6gTPfy|DJlx(} zXM+3gYY%S`Q)S16dQ%WBe=s*yMXT4omBLeNAeu1Tb=Aemo%I|2jq2@dZD~q4Ft!s0pY$cf2)FtS(m{$fXJkdE}|(@rR4s7FV)& zZf4XCSX(YX=sVub3(0N%3ld;(KHN*=Fbj)5D1_-ghe8d&GL1^Te8^X=)U)OTGQ7@8 z5S%}$jMr}9%t19KI57nhOQ^G4($J`?OY!`<(6v4d2PEOWvKFKQK2^q$8Cw)CzOy}a z52-;CNVXf1ipQF|_Ad_CYJF9XO-q}9e-20BUpeT12G=D&&%c7@2Qu#L7S5H(Vgnk` z#h%SVWpEDPicrL;rXK&_g%t!M)c?;>M+%^E!0|0D%|3CJq;hakq-z zO2H7DACLfoybmb8sV1tCJ9`2*8RlYK2Wku}D@Zc*!YEEAKTh>%9zuan24CO{;9FbZ z+a#)0F9Hj3q!5AWh200AmtU($Xd%|A5!Ga2QY*XpzW< z@mUDJ9#wh_TqVr7h!cZR6421PXU`tUW5b24V%wV4$p5XH7uLHQ%=hKBjI8fNAZ9es znlT7tuCMUB7vB?g^Jc(-rhmjNbXsVbNAkXnIZDWinVY*tjXDB2%3sxhkFN|(vZ-LD zmMQQ*o)$TKLb44DK|csD6L2D|>2rT*)E-?X!Oubc7Nit?ZBtti`vx^o@H*LiLa;_J zf8xsV?>FT2+hdESK+U_qrx?i6fI*0YDowIFg120^rk_OGBaj)NV6vh3nvyr+&BEb% zuB9 zK>+6JMr4Jybjm9}PzPw@4i{|r!Rx$uAuS$w>Ym<7Ng!!MO%5m-$AziHRT0k7F#s`GfL^pPwJ&(JQC)^`EoQ z87`fcNL|O$;<-t`tD4rkdwBYr#pw6*i4|^~?1Dm$zYU>g1FhVQmd-+!zp2J?cuAXs z>_7fO_~OaNm$q1GIW7CQbmu?&cx~g?#tevn(gTo=@N)j}Nfdue@Is`*|1GZu!v|!k z{}Mr2=hOZIq^MTnt=Ss(^#+K+5&>0m&aF>+*P#idG6*{>p=VtMVm(grzj={$m4^Qe zR9P-OtOp(r&cV2@)*|(7NcB&zbzs(}xNa zRDS`dj?2V2jbuZSv^snWr~+@^eEI@}t&uj*Gx+UWe+$eU5^s)ia6W~6ir72hRF=&l z;>xvLKc`J=OB|Kq92XPWdM*(RchKDOi{mxA0h7VwKG_4W6L<<2CZNp{*ppsm&?^AV zWc4`$QM~KGkLjgrX3U>SffR=;8XT8_BCaTm#R7$Hlazc=iY(wt)mpcKQ5`X!={O!a z;s6oORw5|d0)qi~w>4>-qqeWR{vY6qfOzf2NlEI0{{OZf&}H}p^CJ;*>ef~blUo`e z2JMqSv9=<5`XF(1L0c5;lAN^cJqic&=X~2tDrUwpXl#I0C|1 z4JHITeAkn?c7){GdZcqtmg<#F#3WYVV=-;%r6G5Lb-Cg9`N@>8czQrc24(Ifjf}md zGea%MuYR}-(F}+vS^-J`8UkT$rqD+Y8dosI4uSYV>#n{4>JOW@Y%3`*r^Z*3nlJ7p zjR+41!S@J=P+^s54a-F;s)S$*sh6cQRi%n~Ui_!|CdOo}kv`MtUMV9!p?THn~M z=-tq#u>M(#>rchc8UJSy%w}L!{Ra^YxAD_uCqdd!xYXWs){2a#e-pam z_8~DbmJGf3Z#Q(|HWLHG|54a--`P99V|{(-7n2}KbIj4f1ooa*xs_VPM(={(CWtWu zNI_p1k3f`UT{mk@_m8MF`$+mn2VHRdL1KD6Rb)h1wb{pV03WLU03RZ2c51fPMc|KU zt=wME5<*M$AA51(_Em?_h=^Q#r&<)$-I9}QletnwDS|$OAD?Ikb z+YCjgLE}BN7x)B$iXs6=h_W1O%CGgq{oHjC3XOA%ulC^@nK%C0EtjsVWQyoqJ2O4K zAIlV&cLj7Jc8Tn^baZqmm!QZh=`ZXPiEZo~*(Z8e zXDFV6&4n-#h-N!-Q`>ij1P9vpGsgg%^& zX?9OAP1F%EHB&IJ5xSE`pj9;~)eTQ704nw$Su4=yAY+C(j@A&o!UP?PX&~zUy>L$y zE|&=HrhL$EaS^JWR#(lmvR_WmWBrYn6{deqntd*~T{{ux;;` z<1BGmbo_=0IR;RQIsiu^3f-O;m=KCGtF#cj3&|`QId23l*&v(%t+5kZIIFjK=dFwtw|u(H)B2wdEo&R6HsE3XW`*85|rm_!x>zWQ&Z9 z3<@gk_O94f^vd9V+<#SGut8*Np)*?k+&OPUiXcjfZ03oFlO=~o*O$kZcY;g_I?|wR zuBJxcN~-788!sa>X3~H8rjoi>A<%E7t)x)(@52*%Hm?m*ya=xcQjS8-3nyf53Ft** z=-}YX1cizD_EA@Z_HfU<)yA{6Wt`n2R_VCvl>5mXnEL@I2j-ya0WyV%V5WKou5z^S ztuxhY`0n`F=|->`3Wbj;cSO^LWF2K+(tTr#m!>AjsC{71rYW`csqT>Y!5r z(P`r*a`Ji!T%5DgH->0vu&oX83DoQL?Q^)NAOwB1E`213l-AwiF~TnMJUJ; z`6*(og4t6+m)YflZWpLzc>ShWs6B-uFE4qpp|AD!cs5*6(;`0zi{)hAbK8C!vp298m8@$Z!QJMw^_}+1DJk+1JYfaC zDFo41fmRSy@>=w=}I=UjXK{wATa?(`uFCu@{xa9c@8xREQainQRD zZ*BkV?+y37Om_P>d6g9`_g`)bX`@})QXC3I(46V<7J?TG{t1&d4xIa{YKtra3iZ{x zaljk8Z;^lXm{b+jg_+yw6kaDsRrCMqH!${OGLZ=?>#3j8%7_(2SR^aBs@v~ z!^)1}9PPh6+6JMStTjxn4Jts(B1miaha2>E)-~V$k2coQ*|=FhHdr^DOp1x{Dy*8^ zuGz0|s!`mf{7l|wR$c(8Y2){%2DTsf&w4wYN8CSq2tn}w<*}0A{o6(Gq{{n0E*10a z%b@sjmz|i8AkCwOR!X1ETbfm5R1Vy$tR;*kk-vll5+J9TcXt@D$TPLYB}=UldOc#$aZf zDlcDZXI+#*jpM;tv(k=T$PF!sg&n1GQ#?}9u@Lf9DcWx-x3jObvea)^X-+-S4{~;J&AOAdjL%&ApcZ-lh-YlT>W>L!&lJgZOC{ z;Fdbpl`KG&bOnN0?+GZq&Vv+|<9I1`e^1ZHD3KYUc1>ijWUY_s_o=@rn5c2*-Qj=0 zO_B9MX=R{0yD)}VGES6n(Y~n0C%}g>?Jx#ZUO<^oAx4~Av&0dSDFAIHwqN0!009c` zs^^IGMUHI*s0YG?JM;7iqASmTXn9VOw9vN9LIYnC5Gs?CM|j;Z)zFg+5*KIVTmV&q z*;D)6fUU+-I}~n`942TH?K}b^HqiBBD0-OKYbwZs%K5bC(5%z3t6T~%C{Xp4ZnSj0 zn4g8a%ylBQ79O#9je*dG3G^IIT$Pe4g(j+hy1e~?CXo-^7`MeiG|2QFgJD~6rm7yb zU4CEi*~p))|3KRDv{Yy|fiX@?)?=g4MgxUu4n}V?m}+q~(Wl>atZ4f&6vf{EZt*Ad zSdP~(Elk$AO-6JCMtIR(g9<9f1Xc@Mj5D(!nXg$mNY>>*FD)H&6qKQm7qNq|wln@0F3%7Yqn`(g68ew#ujnC7ZoE$hZWsWc~ zI1Yvk_0CFcjS*COGZ~-Km*V(pHiu6(gazFuF3!T)f1mOD((lIhqHj+5o!0++Rh^%1 zSZZ=>4+v4U94{Ttwaqo19W#k`neOeZiRA5HWUZLRIa_- z-aK`m;5Tt%L)-dOg~Be9NwHz|4Fmh*x_6mpYR%e`WW(!ZHBE_vw9wVHK#kn3!=e8` zT&h&5r>PN4=!NQe;r@l~HqXB>H{RI^!c(T8%Lb+Bfe5c4psfHtLst)KN1$uI1k?KF zVS*)y&*>^XpdE&;FPMop2?l5iW`u!Mj+<+5kShG?^}Fu5D2gG`frN$4TP)C7Ke0OB z(g&~yZvLLCIb<=HSs*3po;l-K)O%OkWvX5##&vN}6^ZDa7N_i|N3oM4qeHV(DXLKY z=&qr8a4C<@rACv~`b)OBXMLDesm|CfZjppCs1%K@&n=SjMfsBmm> zzqOV1xD`=7qMocIt^X?x|^A;hckX0m}(`(VJtSjirA! z(h(S^P`N_p+5;E-G=<%<-}4<=k8c=_4HzXa|t90}NT0RC_J@PBe zto5B-?Z+jnU%KjO_26DjJM`BA7t37s_uk30F0$ncI}h;WcSpnp7c4%l=b5(Y=Vhq; z$V*YTcfQc9h`0CBDfXNAMfnm_%W%^AhGni671u0`wTA-Da7o9#U2ZJjO0&f6Vsk?2Mb@R=;V%jyBfE zd`DjSWVv~LbR2kP;2R%Sugicb#4hGGX$!u%^b+Oo)uc0@B(Z2z*v5U9jO`L}>`w|w z+SdGeeQ1h&C0dfKEhB8NFz1F%DRVyO5i8D^pVi64`y%xg?T7i%QMvO&dG;1brWAwS z?W2n`691GRD+F;tWaA1Kn6Y;rhy&9ddZ6~X$=4a4=3~}GH3UROwZD+3k0VkRu2m61I>lBqy04oK*A6Q(B*zUKWGRA-k<2PuT z!{y+Va&aHXYSnVCr_GMGYa>Z3kI{uag=C& zetnsDqz#ig%h@O;uYb1$91W$Xv{f;g#j77>?Lu}#nfeuZ`^LxUJF+H*GbL`MDOOj7 z3#3p|O;fqe44vfo{xBuSc-9R&llUlikIonoQ`(o<%DY)ERUTKeyj$*s=7`O-Ir{T< z1I5g7%n;Ngv5D%F?<^z^Ueuc!P)#XtL{;3;kS-AFhWqf61%9)~(hmt&Q1vRj*Y+_D z_u{{#srp2IDA{GK2pjMez0mC+VLn#?v?Z?z=ilA#-?TrzIlk3O7I^BtOs-Q2EFBAd z?9NHx;@{Ibet}7xKpU>{q*%=wstF)gY)}F`IJk z*tPFoH?yu5YfdnIf2j}Lj;FkZ3-{Y@PWDBqtDgkm)%*@M;t%0OR=Dj3al@%&#PX!*_>|BGlzNTF%k&Ek8o5yxH%td{yg_iA9v&Ht&uGA`SsgAsn&$Y5vH5!>l zdg(s4)zPJ?A8_jsiFRp7)nl_!PV}MD(~kUhdy8$K@10TUiKjRFgGk54xj8|fg9uw; zRMEbTV8jrgnU7r(rzI-BynBLFLXiauT8FsAd-3o#Olzf4mnI<-^uxI_;_Q#c)ql_7|&0}&E9(V_7L%AMZ#-S@@?O&iw_uNZ?@>0 z(&AjaXz~RMOb@dr(oAy6hAXRGEpq5mvgfA-3~5*l&&rxu9Sb`eEFZBH7~1U6U+d=! zc0glk%3qC?VYsh1DO3FCr>={72iTO)ocWNfjm=sV!!B^%%(Nb#33OlJes?TAXKwQA z*WVc?f}U{^ZVJVD_&u-j!5~YJs6GF!txYtQc?o1q>f!N;F~n6YRlG|?!gX^4h~T+^ z$;0-St}=e!2`5GsVN&3f5o&s9Ac0nnW5~55wnH#EZ>G{91RT|l8uZk~rCYauxZR9! zj&0-0RgJ;Uwz$+S7-8=eI&gCfD!%iftd2GaPT4_EtYdi+-lySjs`D8sdvbog7zL>? zk%opCXg!=n4k>m|@naTB5YmKDA}#d2SD~)hY$iJ_*0E!0(XMlX6KGP6cVIiSLFFb# zA!;v3lGT%n$Gc(|{erojmcY0k>meA6nDd^!IfG?9YGZPG2X?FSY0D|rY30u~wC75Y zyOn|wWfZ+x0ny3KONn9XS9}&aMuo0h9@s@*$ak87CZVNhF`1?mtcxE5rYLt$HsN$} zQ29R%3v1~kwd0b5D2kf8Z3J0RPZqY99$BxuQ%pCP6N}4E?(L<<{u8C>V%t-}cKmu9 zz4P;r)h}a~E(fYDQ20c?g=1koxaE0ltI?Nt?fSIpeH{jcqp$kssL_i-a=iJ^^j_w< zZYjB*V1K~B?s3GTZjFVFi_)wJi$Dx>qVy>Vg)&}I?1&(9FcmZy2%%eFh~zrxW2V3a>tVQ zU*Xc#PWQAMe9@m!I@M4cl{-|xN|TqUHvSO=QTHEB1mK8gsn} za`J~V0bUTiDxZG~BrzKsr`l+-j)_9S3wh}`&Yh+Z(`A<|l^11V>U#AudJjoh2xKsR zJU0WmxbtVJg)%^|0y@Hno_a96N?yVaw|AIO8qjSY!`5@|a>`egkx`h449~=+!BnF5o6z93u7{P zxpUe_L`EN^q*zeSTs>7fmwI_vF?FdBGf>Xh%USg}CGAzwzJC^bT=-JamwAso5t|T^ z)N~c^6YR>rY&&6s)`*mFOI=`7&8O5XeP@(w%>f6b^!Wtr;^K_r!XhP0<$rwxQ#{UdO)=z_zQ{vs<^1ki zocHr7RBlmTxO7xRB!=O{ezLHrr^6DA$C35p!w5_?Kx=t_pKxi6&Z}6--?EydmrkPZ z$@sl1D^sAHIryrw@)wB6J)@UojA>h(??EqV>^^Fi%!$>S|MHCux)j0~&ijFVFaM-j za{bb{oBNOQ@@)@#xD#WwIOtY4m0pY zag-v)=5ogJFSDWV@fOT-Fsl?Qrs_KD>KdDwakuZ@mgD;4N5F9#z0m^?ytTy&^U^Xi zLl~rsY9eAjE{)Q5IW$#OdFZolo%6C>D%#FjicZ>X>^S!kid~<#+~2|yas2m_NWYfz z@S73vo5rrLsWcajm2r=H9DT3cFH<2hH0#E%xbNSzOXhof{eX%&-$M*TS+sqf1q7SU z7kG;s4PG7SPe4QdpO{j(WPY`)?bnyLpu_6%>Q%Nv{{plLf0+UaedCjMLuxN$1v?gO z__!M4Tf8&7XKhQI8xk&wslY&j-71F+_kXQRacmGW1x5cNy@W_+%`l9q}|pE^20 z3FB*Z1l-G_L~7b3j?O(x^6-c8thc6Llk<}_Pp0T3lwI9|T!q*0ynM}Xr*P#kZ?ibb z*7U6yxLd;%$J2TyCMHHk*));oR7~j)e15@Fp$daLoEk{zpi@Ij+vUPX1xe0#-ezCy zdUw~U0!wINRIJAXL9&E@3)gcmB4YqtZVdD#m}i2bc<$h!X6aUeC%TKx9Pi}61sxYf z2Px0LfiKO`vKYe5bd(wg_J|4?fpQh2xX(Q>X7)+G^lrL#^O+C#eB|V+BO)ZIw>01_ zh5CFzf(!l$eYg77)YSa?6^6mo!o2aiQg446Kd>e_>bCeV?D<}F)xe-1c%8d;jn>ui z*4A*BndJHTD;1E1K0*f8hBKkzF8C!2U{MY4JHzC_PrH#dctVR@;M8&CR&HHK9)45J zfAk08m8!Y9xxnZ4ZMp$he*d)oRKb84Q6ESr>jtnQZUfdJM_II z!D1);xJP3=1_-Yv&^+uk6*Dd_?HCL@w4drwZvtp)!$2)g+6VqLire6tX{r)vC%eAV#cP@p|!0kNpt-`$iOpU$o>Pxn1(?R-%iObM@vpZ`Ke0EBKqbH$NP{(c9 ztPOtq*rgL_-`UR29=;M-63mgH6i}lSj#3cTP`cqM{)-*{faiXH0yJ9yKh7?<{l;mj zdZsy4CbAZ%sNfUO^Bx%)c@dX^iuoCgyYZ_xk;Q-VuggA5YNzfjXKqfy0l&COR!RYt JeCCS#{{jFJPr?8I diff --git a/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.puml b/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.puml index 4be2286..5a9d7b2 100644 --- a/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.puml +++ b/docs/sequence-diagrams/puml/d3-marketplace-buy-cspr-token.puml @@ -4,38 +4,41 @@ 'autonumber actor User participant "d3.app" as d3 #lightblue -participant "Controller" -participant "Registrar" +participant "D3 Operator" as d3Op participant "Registry" -participant "Resolver" +participant "Registrar" boundary "Events" -== Buy a *cspr name from D3 Marketplace with fiat payment == +== Buy *cspr names from D3 Marketplace with CSPR payment == User -> d3: Buy *cspr name activate d3 d3 -> User: signed SecondarySaleVoucher deactivate d3 -User -> Controller: secondarySale(SecondarySaleVoucher, sig) -activate Controller -Controller -> Controller: verify voucher -Controller -> Controller: Process CSPR payment -Controller -> "Events": Payment event -Controller -> Registrar: secondarySale(PaymentVoucher, sig) - -activate Registrar -Registrar -> Registrar: verify voucher -Registrar -> Registry: transfer(seller, buyer, cspr_name_token_id) -activate Registry -Registry -> Registry: Clear Resolver -Registry -> "Events": MetadataUpdated event -Registry -> Registry: transfer token -Registry -> "Events": Transfer event -Registry -> Registrar -deactivate Registry -Registrar -> d3 -deactivate Registrar +User -> d3Op: secondarySale(SecondarySaleVoucher, sig) +activate d3Op +d3Op -> d3Op: verify voucher expiration +d3Op -> d3Op: verify voucher signature +d3Op -> d3Op: process CSPR payment +d3Op -> "Events": Payment event +loop N times + d3Op -> Registry: transfer(seller, buyer, cspr_name_token_id) + activate Registry + Registry -> Registrar: can_transfer(cspr_name_token_id) + Registrar -> Registry + alt Cannot transfer + Registry ->X d3Op: Revert with cannot_transfer error + end + Registry -> Registry: clear Resolver + Registry -> "Events": MetadataUpdated event + Registry -> Registry: clear operator + Registry -> Registry : set new owner + Registry -> "Events": Transfer event + Registry -> d3Op + deactivate Registry +end +d3Op -> User deactivate d3 == == diff --git a/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml b/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml index b625709..4026a37 100644 --- a/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml +++ b/docs/sequence-diagrams/puml/d3-marketplace-buy-fiat.puml @@ -13,7 +13,7 @@ boundary "Events" User -> d3: Buy *cspr name activate d3 -d3 -> d3: Process fiat payment +d3 -> d3: process fiat payment d3 -> User deactivate d3 @@ -22,7 +22,7 @@ activate Registrar Registrar -> Registrar: verify voucher Registrar -> Registry: transfer(seller, buyer, cspr_name_token_id) activate Registry -Registry -> Registry: Clear Resolver +Registry -> Registry: clear Resolver Registry -> "Events": MetadataUpdated event Registry -> Registry: transfer token Registry -> "Events": Transfer event diff --git a/docs/sequence-diagrams/puml/d3-marketplace-list.png b/docs/sequence-diagrams/puml/d3-marketplace-list.png index 70d77f844a9c53bdb7d32fd3215c0c97acf66bbd..22c6e106fd8d431606e7b591ee327013532e8a88 100644 GIT binary patch literal 33196 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 O%JK&fJlc2s(*FVJy80{t literal 23283 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 z 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 F<}dcZ*_{9Y diff --git a/docs/sequence-diagrams/puml/d3-marketplace-list.puml b/docs/sequence-diagrams/puml/d3-marketplace-list.puml index e12d752..9970e8f 100644 --- a/docs/sequence-diagrams/puml/d3-marketplace-list.puml +++ b/docs/sequence-diagrams/puml/d3-marketplace-list.puml @@ -7,20 +7,23 @@ participant "d3.app" as d3 #lightblue participant "Registry" boundary "Events" -== Buy a *cspr name from D3 Marketplace with fiat payment == +== List a *cspr name on D3 Marketplace == Owner -> d3: List *cspr name activate d3 -d3 -> Owner - -Owner -> Registry: approve(cspr_name_token_id, registrar_package_hash) -activate "Registry" -Registry -> Registry: set token operator -Registry -> "Events": Approval event -Registry -> Owner -deactivate "Registry" +d3 -> Registry: is_approved_for_all(owner, d3operator_package_hash) +Registry -> d3 +alt Not approved + Owner -> Registry: set_approval_for_all(owner, d3operator_package_hash) + activate "Registry" + Registry -> Registry: set token operator + Registry -> "Events": ApprovalForAll event + Registry -> Owner + deactivate "Registry" +end d3 -> d3: list *cspr name -== == +d3 -> Owner deactivate d3 +== == @enduml diff --git a/docs/sequence-diagrams/puml/expire-domain.png b/docs/sequence-diagrams/puml/expire-domain.png index 80d5b53defea0fa83dcd66e0c024480097a6556a..8316d4788c42209d52181d4be1f8bbcc1607e43f 100644 GIT binary patch literal 37080 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 z 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 umjMDjW8l=26 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 E1M}_l!2kdN diff --git a/docs/sequence-diagrams/puml/expire-domain.puml b/docs/sequence-diagrams/puml/expire-domain.puml index 2efa823..d593467 100644 --- a/docs/sequence-diagrams/puml/expire-domain.puml +++ b/docs/sequence-diagrams/puml/expire-domain.puml @@ -9,21 +9,24 @@ boundary "Events" == Expire a domain == -"Anyone" -> "Registrar": expire(cspr_name) +"Anyone" -> "Registrar": expire(cspr_names[]) activate Registrar -Registrar -> Registry: metadata(cspr_name_token_id) -Registry -> Registrar -Registrar -> Registrar: Check expiry date -group expiry date > blocktime - Registrar -> Registry: burn(cspr_name_token_id) - activate Registry - Registry -> Registry: Clear resolver - Registry -> "Events": MetadataUpdated event - Registry -> Registry: burn token - Registry -> "Events": Burn event +loop N times + Registrar -> Registry: metadata(cspr_name_token_id) Registry -> Registrar - deactivate Registry + Registrar -> Registrar: Check expiry date + group expiration + grace_period > blocktime + Registrar -> Registry: burn(cspr_name_token_id) + activate Registry + Registry -> Registry: clear resolver + Registry -> "Events": MetadataUpdated event + Registry -> Registry: burn token + Registry -> "Events": Burn event + Registry -> Registrar + deactivate Registry + end end + Registrar -> "Anyone" @enduml diff --git a/docs/sequence-diagrams/puml/offchain-multiple-purchase.puml b/docs/sequence-diagrams/puml/offchain-multiple-purchase.puml index f2d7bce..d543727 100644 --- a/docs/sequence-diagrams/puml/offchain-multiple-purchase.puml +++ b/docs/sequence-diagrams/puml/offchain-multiple-purchase.puml @@ -6,21 +6,34 @@ actor User participant "d3.app" as d3 #lightblue participant "Registrar" participant "Registry" -participant "Resolver" boundary "Events" == Buy multiple (N) *cspr names with fiat currency == User -> d3: Buy N *cspr names activate d3 -d3 -> d3: Process fiat payment +d3 -> d3: process fiat payment d3 -> User deactivate d3 -d3 -> Registrar: register(PaymentVoucher, sig) +d3 -> Registrar: register(TokenizationVoucher) activate Registrar -Registrar -> Registrar: verify voucher +Registrar -> Registrar: verify voucher\nexpiration loop N times + Registrar -> Registry: get_token_metadata(name_hash) + Registry -> Registrar + alt Token exists + Registrar -> Registrar: Check expiration date + alt expiration+grace_period < blocktime + Registrar -> Registry: burn(name_hash) + Registry -> Registry: Clear resolver + Registry -> "Events": MetadataUpdated event + Registry -> Registry: burn token + Registry -> "Events": Burn event + else expiration+grace_period > blocktime + Registrar ->x d3: Revert with\nnot expired token error + end + end Registrar -> Registry: mint(buyer, metadata) activate Registry Registry -> Registry: mint token diff --git a/docs/sequence-diagrams/puml/offchain-purchase.png b/docs/sequence-diagrams/puml/offchain-purchase.png index cfaf42fdc43a892e3ee8fbf3a3ef68fa0151288b..e93beb97442735bf65244c354cce711e08078e98 100644 GIT binary patch literal 61154 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�gmtVGMUt?&VKaIDL}1O}`r2 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 L;vWwrPhb8YNoDGd literal 24644 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 OEAW "Registrar": expire() +"Anyone" -> "Registrar": expire(cspr_name) activate Registrar -Registrar -> Registry: metadata() +Registrar -> Registry: metadata(cspr_name_token_id) Registry -> Registrar Registrar -> Registrar: Check expiry date group expiry date > blocktime - Registrar -> Registry: burn() + Registrar -> Registry: burn(cspr_name_token_id) activate Registry + Registry -> Registry: Clear resolver + Registry -> "Events": MetadataUpdated event Registry -> Registry: burn token Registry -> "Events": Burn event Registry -> Registrar diff --git a/docs/sequence-diagrams/puml/offchain-purchase.png b/docs/sequence-diagrams/puml/offchain-purchase.png index 33d9e2db8d43490a95f6070034252693b734468f..9d65a941113e9d6b542c08ef9e20c798e057a955 100644 GIT binary patch literal 32482 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 literal 30813 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%0A23tD!#FDU71>eNTG;cUS4L3bql1`kGuBt$B!S0 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 d3: Buy *cspr name activate d3 @@ -17,10 +17,10 @@ d3 -> d3: Process fiat payment d3 -> User deactivate d3 -d3 -> Registrar: register(PaymentVoucher) +d3 -> Registrar: register(PaymentVoucher, sig) activate Registrar Registrar -> Registrar: verify voucher -Registrar -> Registry: mint(to, metadata) +Registrar -> Registry: mint(buyer, metadata) activate Registry Registry -> Registry: mint token Registry -> "Events": Mint event diff --git a/docs/sequence-diagrams/puml/offchain-renewal.png b/docs/sequence-diagrams/puml/offchain-renewal.png index 97b3742c9f120c12214a6c04d39ae65555e3fd73..d94bdeb9849e07280be228e180fb6a277b725863 100644 GIT binary patch literal 30591 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 literal 25356 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 LoK8NrK9}%6fv_AV diff --git a/docs/sequence-diagrams/puml/offchain-renewal.puml b/docs/sequence-diagrams/puml/offchain-renewal.puml index e270514..5d35c33 100644 --- a/docs/sequence-diagrams/puml/offchain-renewal.puml +++ b/docs/sequence-diagrams/puml/offchain-renewal.puml @@ -2,23 +2,23 @@ 'https://plantuml.com/sequence-diagram 'autonumber -actor User +actor Owner participant "d3.app" as d3 #lightblue participant "Registrar" participant "Registry" boundary "Events" -== Offchain renewal == +== Renew a *cspr name with fiat currency == -User -> d3: Renew +Owner -> d3: Renew *cspr name activate d3 d3 -> d3: Process fiat payment -d3 -> User +d3 -> Owner deactivate d3 -d3 -> Registrar: Renew +d3 -> Registrar: renew(RenewalVoucher, sig) activate Registrar -Registrar -> Registry: set_token_metadata() +Registrar -> Registry: set_token_metadata(new_metadata) activate Registry Registry -> Registry: update metadata Registry -> "Events": MetadataUpdated event diff --git a/docs/sequence-diagrams/puml/onchain-purchase.png b/docs/sequence-diagrams/puml/onchain-purchase.png index 9327827d5333e8a280bec04e7f0700d7046d6a68..c58a60180d0b3ee20be832ad3921d0516b9efa8a 100644 GIT binary patch literal 46924 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%0D0vSMbDW;8>9hIGe9ogo>@5L&Sv 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 JXtCor{tu+pdbI!m diff --git a/docs/sequence-diagrams/puml/onchain-purchase.puml b/docs/sequence-diagrams/puml/onchain-purchase.puml index 6ad432f..fff875b 100644 --- a/docs/sequence-diagrams/puml/onchain-purchase.puml +++ b/docs/sequence-diagrams/puml/onchain-purchase.puml @@ -10,19 +10,22 @@ participant "Registry" participant "Resolver" boundary "Events" -== Onchain purchase == +== Buy a *cspr name with CSPR token == User -> d3: Buy *cspr name with CSPR +activate d3 d3 -> User: signed PaymentVoucher -User -> Controller: buy(PaymentVoucher) +deactivate d3 + +User -> Controller: buy(PaymentVoucher, sig) activate Controller Controller -> Controller: verify voucher Controller -> Controller: Process CSPR payment Controller -> "Events": Payment event -Controller -> Registrar: register(PaymentVoucher) +Controller -> Registrar: register(PaymentVoucher, sig) activate Registrar Registrar -> Registrar: verify voucher -Registrar -> Registry: mint(to, metadata) +Registrar -> Registry: mint(buyer, metadata) activate Registry Registry -> Registry: mint token Registry -> "Events": Mint event diff --git a/docs/sequence-diagrams/puml/onchain-renewal.png b/docs/sequence-diagrams/puml/onchain-renewal.png index 198ba933cfde439cd4beaed33d77fe32e31fbb3a..364a08160f790b0b70c8271959d78ad31ddba23c 100644 GIT binary patch literal 42210 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 literal 28359 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

Tries to deploy a contract with given init args. Read more
§

fn deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> <R as OdraContract>::HostRef
where + T: OdraConfig,

Deploys a contract with given init args and configuration. Read more
§

fn try_deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> Result<<R as OdraContract>::HostRef, OdraError>
where + T: OdraConfig,

Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where - T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
§

impl<T> Revertible for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where - E: Into<OdraError>,

Reverts the contract execution with the given error.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + E: Into<OdraError>,
Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketContractRef.html b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketContractRef.html index fd9bcb8..e9abdf4 100644 --- a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketContractRef.html +++ b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketContractRef.html @@ -1,26 +1,42 @@ -SecondaryMarketContractRef in casper_name_contracts::contracts::marketplace - Rust
pub struct SecondaryMarketContractRef { /* private fields */ }
Expand description

SecondaryMarket Contract Ref.

-

Implementations§

source§

impl SecondaryMarketContractRef

source

pub fn init( +SecondaryMarketContractRef in casper_name_contracts::contracts::marketplace - Rust
casper_name_contracts::contracts::marketplace

Struct SecondaryMarketContractRef

Source
pub struct SecondaryMarketContractRef { /* private fields */ }
Expand description

SecondaryMarket Contract Ref.

+

Implementations§

Source§

impl SecondaryMarketContractRef

Source

pub fn init( &mut self, - signer: PublicKey, + signer: PublicKey, treasury: Address, - name_token: Address + name_token: Address, )

Initializes the secondary market with the signer public key, the treasury address and the name token contract address.

-
source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

-
source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

-
source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

-
source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

-
source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

-
source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

-
source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

-

Trait Implementations§

source§

impl ContractRef for SecondaryMarketContractRef

source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

impl SchemaErrors for SecondaryMarketContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for SecondaryMarketContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
Source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

+
Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

+
Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

+
Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

+
Source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

+
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

+
Source

pub fn pause(&mut self)

Delegated. See self.controller.pause() for details.

+
Source

pub fn unpause(&mut self)

Delegated. See self.controller.unpause() for details.

+
Source

pub fn is_paused(&self) -> bool

Delegated. See self.controller.is_paused() for details.

+

Trait Implementations§

Source§

impl ContractRef for SecondaryMarketContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for SecondaryMarketContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for SecondaryMarketContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketHostRef.html b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketHostRef.html index 9ac48d8..71ae4f8 100644 --- a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketHostRef.html +++ b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketHostRef.html @@ -1,62 +1,84 @@ -SecondaryMarketHostRef in casper_name_contracts::contracts::marketplace - Rust
pub struct SecondaryMarketHostRef { /* private fields */ }
Expand description

SecondaryMarket Host Ref.

-

Implementations§

source§

impl SecondaryMarketHostRef

source

pub fn init( +SecondaryMarketHostRef in casper_name_contracts::contracts::marketplace - Rust
casper_name_contracts::contracts::marketplace

Struct SecondaryMarketHostRef

Source
pub struct SecondaryMarketHostRef { /* private fields */ }
Expand description

SecondaryMarket Host Ref.

+

Implementations§

Source§

impl SecondaryMarketHostRef

Source

pub fn init( &mut self, - signer: PublicKey, + signer: PublicKey, treasury: Address, - name_token: Address + name_token: Address, )

Initializes the secondary market with the signer public key, the treasury address and the name token contract address.

-
source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

-
source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

-
source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

-
source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

-
source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

-
source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

-
source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

-
source§

impl SecondaryMarketHostRef

source

pub fn try_init( +

Source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

+
Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

+
Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

+
Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

+
Source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

+
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

+
Source

pub fn pause(&mut self)

Delegated. See self.controller.pause() for details.

+
Source

pub fn unpause(&mut self)

Delegated. See self.controller.unpause() for details.

+
Source

pub fn is_paused(&self) -> bool

Delegated. See self.controller.is_paused() for details.

+

Source§

impl SecondaryMarketHostRef

Source

pub fn try_init( &mut self, - signer: PublicKey, + signer: PublicKey, treasury: Address, - name_token: Address + name_token: Address, ) -> OdraResult<()>

Initializes the secondary market with the signer public key, the treasury address and the name token contract address. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_buy( +

Source

pub fn try_buy( &mut self, voucher: SecondarySaleVoucher, - signature: Bytes + signature: Bytes, ) -> OdraResult<()>

Payable. Buys name tokens from the secondary market. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_has_role(&self, role: &Role, address: &Address) -> OdraResult<bool>

Delegated. See self.controller.has_role() for details. +

Source

pub fn try_has_role(&self, role: &Role, address: &Address) -> OdraResult<bool>

Delegated. See self.controller.has_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_grant_role( +

Source

pub fn try_grant_role( &mut self, role: &Role, - address: &Address + address: &Address, ) -> OdraResult<()>

Delegated. See self.controller.grant_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_revoke_role( +

Source

pub fn try_revoke_role( &mut self, role: &Role, - address: &Address + address: &Address, ) -> OdraResult<()>

Delegated. See self.controller.revoke_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_signer_public_key(&mut self, signer: PublicKey) -> OdraResult<()>

Delegated. See self.controller.set_signer_public_key() for details. +

Source

pub fn try_set_signer_public_key(&mut self, signer: PublicKey) -> OdraResult<()>

Delegated. See self.controller.set_signer_public_key() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_treasury(&mut self, treasury: Address) -> OdraResult<()>

Delegated. See self.controller.set_treasury() for details. +

Source

pub fn try_set_treasury(&mut self, treasury: Address) -> OdraResult<()>

Delegated. See self.controller.set_treasury() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_signer_public_key(&self) -> OdraResult<PublicKey>

Delegated. See self.controller.signer_public_key() for details. +

Source

pub fn try_signer_public_key(&self) -> OdraResult<PublicKey>

Delegated. See self.controller.signer_public_key() for details. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

source§

impl EntryPointsCallerProvider for SecondaryMarketHostRef

source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
source§

impl HasIdent for SecondaryMarketHostRef

source§

fn ident() -> String

Returns the contract’s ident.
source§

impl HostRef for SecondaryMarketHostRef

source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

fn env(&self) -> &HostEnv

Returns the host environment.
source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where - T: HostRef,

§

fn address(&self) -> &Address

Returns a reference to the [Address] of the type.
source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
Source

pub fn try_pause(&mut self) -> OdraResult<()>

Delegated. See self.controller.pause() for details. +Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_unpause(&mut self) -> OdraResult<()>

Delegated. See self.controller.unpause() for details. +Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_is_paused(&self) -> OdraResult<bool>

Delegated. See self.controller.is_paused() for details. +Does not fail in case of error, returns odra::OdraResult instead.

+

Trait Implementations§

Source§

impl EntryPointsCallerProvider for SecondaryMarketHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for SecondaryMarketHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for SecondaryMarketHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where + T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketInitArgs.html b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketInitArgs.html index d3ed474..53b6268 100644 --- a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketInitArgs.html +++ b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketInitArgs.html @@ -1,16 +1,29 @@ -SecondaryMarketInitArgs in casper_name_contracts::contracts::marketplace - Rust
pub struct SecondaryMarketInitArgs {
-    pub signer: PublicKey,
+SecondaryMarketInitArgs in casper_name_contracts::contracts::marketplace - Rust
casper_name_contracts::contracts::marketplace

Struct SecondaryMarketInitArgs

Source
pub struct SecondaryMarketInitArgs {
+    pub signer: PublicKey,
     pub treasury: Address,
     pub name_token: Address,
 }
Expand description

SecondaryMarket contract constructor arguments.

-

Fields§

§signer: PublicKey§treasury: Address§name_token: Address

Trait Implementations§

source§

impl Into<RuntimeArgs> for SecondaryMarketInitArgs

source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
source§

impl InitArgs for SecondaryMarketInitArgs

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Fields§

§signer: PublicKey§treasury: Address§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for SecondaryMarketInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for SecondaryMarketInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/name_token/enum.NameTokenError.html b/docs/casper_name_contracts/contracts/name_token/enum.NameTokenError.html index d35dd09..f6402c6 100644 --- a/docs/casper_name_contracts/contracts/name_token/enum.NameTokenError.html +++ b/docs/casper_name_contracts/contracts/name_token/enum.NameTokenError.html @@ -1,17 +1,32 @@ -NameTokenError in casper_name_contracts::contracts::name_token - Rust
pub enum NameTokenError {
+NameTokenError in casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts::name_token

Enum NameTokenError

Source
pub enum NameTokenError {
     NotWhitelisted = 1_301,
     InvalidTokenOwner = 1_302,
     ExpiredTokenTransfer = 1_303,
     InvalidTokenIdentifier = 1_304,
     InvalidResolver = 1_305,
-}

Variants§

§

NotWhitelisted = 1_301

§

InvalidTokenOwner = 1_302

§

ExpiredTokenTransfer = 1_303

§

InvalidTokenIdentifier = 1_304

§

InvalidResolver = 1_305

Trait Implementations§

source§

impl From<NameTokenError> for OdraError

source§

fn from(error: NameTokenError) -> Self

Converts to this type from the input type.
source§

impl SchemaErrors for NameTokenError

source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ TokenSupplyDepleted = 1_306, + WhitelistedAlready = 1_307, +}

Variants§

§

NotWhitelisted = 1_301

§

InvalidTokenOwner = 1_302

§

ExpiredTokenTransfer = 1_303

§

InvalidTokenIdentifier = 1_304

§

InvalidResolver = 1_305

§

TokenSupplyDepleted = 1_306

§

WhitelistedAlready = 1_307

Trait Implementations§

Source§

impl From<NameTokenError> for OdraError

Source§

fn from(error: NameTokenError) -> Self

Converts to this type from the input type.
Source§

impl SchemaErrors for NameTokenError

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/name_token/index.html b/docs/casper_name_contracts/contracts/name_token/index.html index 2cf0b97..4899b58 100644 --- a/docs/casper_name_contracts/contracts/name_token/index.html +++ b/docs/casper_name_contracts/contracts/name_token/index.html @@ -1 +1 @@ -casper_name_contracts::contracts::name_token - Rust

Module casper_name_contracts::contracts::name_token

source ·

Structs§

Enums§

\ No newline at end of file +casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts

Module name_token

Source

Structs§

Enums§

\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/name_token/struct.NameToken.html b/docs/casper_name_contracts/contracts/name_token/struct.NameToken.html index 74c5fca..e98794e 100644 --- a/docs/casper_name_contracts/contracts/name_token/struct.NameToken.html +++ b/docs/casper_name_contracts/contracts/name_token/struct.NameToken.html @@ -1,90 +1,81 @@ -NameToken in casper_name_contracts::contracts::name_token - Rust
pub struct NameToken { /* private fields */ }
Expand description

NameToken contract. It is a CEP78 token with additional functionalities.

-

Implementations§

source§

impl NameToken

source

pub fn init(&mut self, name: String, symbol: String)

Initializes CEP78 with the given name and symbol.

-
source

pub fn token_exists(&self, token_hash: &String) -> bool

Checks if a token with the given hash exists.

-
source

pub fn burn(&mut self, token_id: Maybe<u64>, token_hash: Maybe<String>)

Only admin. Burns the token with the given hash.

-
source

pub fn admin_transfer(&mut self, recipient: Address, token_hashes: Vec<String>)

Only admin. Transfer tokens to the given recipient.

-
source

pub fn transfer( +NameToken in casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts::name_token

Struct NameToken

Source
pub struct NameToken { /* private fields */ }
Expand description

NameToken contract. It is a CEP95 token with additional functionalities.

+

Implementations§

Source§

impl NameToken

Source

pub fn init(&mut self, name: String, symbol: String, max_supply: u64)

Initializes CEP95 with the given name and symbol.

+
Source

pub fn token_exists(&self, token_id: U256) -> bool

Source

pub fn mint( &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String>, - source_key: Address, - target_key: Address -)

Transfer token.

-
source

pub fn set_token_metadata( + recipient: Address, + token_id: U256, + token_metadata: Vec<(String, String)>, +)

Source

pub fn burn(&mut self, token_id: U256)

Source

pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>)

Source

pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256)

Source

pub fn set_token_metadata( &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String>, - token_meta_data: String -)

Only admin. Set token’s metadata.

-
source

pub fn metadata_by_hash(&self, token_hash: String) -> String

Return the metadata of the token with the given hash.

-
source

pub fn resolver(&self, token_hash: String) -> Option<Address>

Return the resolver of the token with the given hash.

-
source

pub fn set_resolver(&mut self, token_hash: String, resolver: Address)

Token owner only. Set the resolver of the token with the given hash.

-
source

pub fn assert_is_owner(&self, token_hash: &String, address: Address)

Check if the address is the owner of the token with the given hash.

-
source

pub fn is_token_valid(&self, token_hash: &String) -> bool

Check if the token with the given hash is expired.

-
source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

-
source

pub fn get_default_resolver(&self) -> Address

Get the default resolver.

-
source

pub fn get_collection_name(&self) -> String

Delegated. See self.token.get_collection_name() for details.

-
source

pub fn get_collection_symbol(&self) -> String

Delegated. See self.token.get_collection_symbol() for details.

-
source

pub fn set_variables( + token_id: U256, + token_metadata: Vec<(String, String)>, +)

Source

pub fn resolver(&self, token_id: U256) -> Option<Address>

Source

pub fn set_resolver(&mut self, token_id: U256, resolver: Address)

Source

pub fn assert_is_owner(&self, token_id: U256, address: Address)

Source

pub fn is_token_valid(&self, token_id: U256) -> bool

Source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

+
Source

pub fn get_default_resolver(&self) -> Address

Get the default resolver.

+
Source

pub fn whitelist(&mut self, address: Address)

Source

pub fn revoke_whitelist(&mut self, address: Address)

Source

pub fn name(&self) -> String

Delegated. See self.token.name() for details.

+
Source

pub fn symbol(&self) -> String

Delegated. See self.token.symbol() for details.

+
Source

pub fn balance_of(&self, owner: Address) -> U256

Delegated. See self.token.balance_of() for details.

+
Source

pub fn owner_of(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.owner_of() for details.

+
Source

pub fn safe_transfer_from( &mut self, - allow_minting: Maybe<bool>, - acl_whitelist: Maybe<Vec<Address>>, - operator_burn_mode: Maybe<bool> -)

Delegated. See self.token.set_variables() for details.

-
source

pub fn mint( - &mut self, - token_owner: Address, - token_meta_data: String, - token_hash: Maybe<String> -)

Delegated. See self.token.mint() for details.

-
source

pub fn approve( - &mut self, - spender: Address, - token_id: Maybe<u64>, - token_hash: Maybe<String> -)

Delegated. See self.token.approve() for details.

-
source

pub fn revoke(&mut self, token_id: Maybe<u64>, token_hash: Maybe<String>)

Delegated. See self.token.revoke() for details.

-
source

pub fn set_approval_for_all(&mut self, approve_all: bool, operator: Address)

Delegated. See self.token.set_approval_for_all() for details.

-
source

pub fn is_approved_for_all( - &mut self, - token_owner: Address, - operator: Address -) -> bool

Delegated. See self.token.is_approved_for_all() for details.

-
source

pub fn owner_of( - &self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> Address

Delegated. See self.token.owner_of() for details.

-
source

pub fn get_approved( - &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> Option<Address>

Delegated. See self.token.get_approved() for details.

-
source

pub fn metadata( - &self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> String

Delegated. See self.token.metadata() for details.

-
source

pub fn balance_of(&mut self, token_owner: Address) -> u64

Delegated. See self.token.balance_of() for details.

-
source

pub fn register_owner(&mut self, token_owner: Maybe<Address>) -> String

Delegated. See self.token.register_owner() for details.

-
source§

impl NameToken

source

pub fn wrapped_metadata(&self, token_hash: &str) -> NameTokenMetadata

Trait Implementations§

source§

impl HasEntrypoints for NameToken

source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
source§

impl HasEvents for NameToken

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl HasIdent for NameToken

source§

fn ident() -> String

Returns the contract’s ident.
source§

impl Module for NameToken

source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
source§

impl OdraContract for NameToken

§

type HostRef = NameTokenHostRef

The host reference type.
§

type ContractRef = NameTokenContractRef

The contract reference type.
§

type InitArgs = NameTokenInitArgs

The init args type.
source§

impl SchemaCustomTypes for NameToken

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl SchemaEntrypoints for NameToken

source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
source§

impl SchemaErrors for NameToken

source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for NameToken

source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<R> Deployer<R> for R
where + from: Address, + to: Address, + token_id: U256, + data: Option<Bytes>, +)

Delegated. See self.token.safe_transfer_from() for details.

+
Source

pub fn approve(&mut self, spender: Address, token_id: U256)

Delegated. See self.token.approve() for details.

+
Source

pub fn revoke_approval(&mut self, token_id: U256)

Delegated. See self.token.revoke_approval() for details.

+
Source

pub fn approved_for(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.approved_for() for details.

+
Source

pub fn approve_for_all(&mut self, operator: Address)

Delegated. See self.token.approve_for_all() for details.

+
Source

pub fn revoke_approval_for_all(&mut self, operator: Address)

Delegated. See self.token.revoke_approval_for_all() for details.

+
Source

pub fn is_approved_for_all(&self, owner: Address, operator: Address) -> bool

Delegated. See self.token.is_approved_for_all() for details.

+
Source

pub fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>

Delegated. See self.token.token_metadata() for details.

+
Source

pub fn get_owner(&self) -> Address

Delegated. See self.ownable.get_owner() for details.

+
Source

pub fn get_pending_owner(&self) -> Option<Address>

Delegated. See self.ownable.get_pending_owner() for details.

+
Source

pub fn transfer_ownership(&mut self, new_owner: &Address)

Delegated. See self.ownable.transfer_ownership() for details.

+
Source

pub fn accept_ownership(&mut self)

Delegated. See self.ownable.accept_ownership() for details.

+
Source

pub fn renounce_ownership(&mut self)

Delegated. See self.ownable.renounce_ownership() for details.

+
Source§

impl NameToken

Source

pub fn wrapped_metadata(&self, token_id: U256) -> NameTokenMetadata

Trait Implementations§

Source§

impl HasEntrypoints for NameToken

Source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
Source§

impl HasEvents for NameToken

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl HasIdent for NameToken

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl Module for NameToken

Source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
Source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
Source§

impl OdraContract for NameToken

Source§

type HostRef = NameTokenHostRef

The host reference type.
Source§

type ContractRef = NameTokenContractRef

The contract reference type.
Source§

type InitArgs = NameTokenInitArgs

The init args type.
Source§

impl SchemaCustomTypes for NameToken

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl SchemaEntrypoints for NameToken

Source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
Source§

impl SchemaErrors for NameToken

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for NameToken

Source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
Source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<R> Deployer<R> for R
where R: OdraContract,

§

fn deploy( env: &HostEnv, - init_args: <R as OdraContract>::InitArgs + init_args: <R as OdraContract>::InitArgs, ) -> <R as OdraContract>::HostRef

Deploys a contract with given init args. Read more
§

fn try_deploy( env: &HostEnv, - init_args: <R as OdraContract>::InitArgs -) -> Result<<R as OdraContract>::HostRef, OdraError>

Tries to deploy a contract with given init args. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+ init_args: <R as OdraContract>::InitArgs, +) -> Result<<R as OdraContract>::HostRef, OdraError>
Tries to deploy a contract with given init args. Read more
§

fn deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> <R as OdraContract>::HostRef
where + T: OdraConfig,

Deploys a contract with given init args and configuration. Read more
§

fn try_deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> Result<<R as OdraContract>::HostRef, OdraError>
where + T: OdraConfig,

Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where - T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ T: OdraContract,
§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
§

impl<T> Revertible for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where - E: Into<OdraError>,

Reverts the contract execution with the given error.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + E: Into<OdraError>,
Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenContractRef.html b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenContractRef.html index ef0abd4..6bb832a 100644 --- a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenContractRef.html +++ b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenContractRef.html @@ -1,80 +1,60 @@ -NameTokenContractRef in casper_name_contracts::contracts::name_token - Rust
pub struct NameTokenContractRef { /* private fields */ }
Expand description

NameToken Contract Ref.

-

Implementations§

source§

impl NameTokenContractRef

source

pub fn init(&mut self, name: String, symbol: String)

Initializes CEP78 with the given name and symbol.

-
source

pub fn token_exists(&self, token_hash: &String) -> bool

Checks if a token with the given hash exists.

-
source

pub fn burn(&mut self, token_id: Maybe<u64>, token_hash: Maybe<String>)

Only admin. Burns the token with the given hash.

-
source

pub fn admin_transfer(&mut self, recipient: Address, token_hashes: Vec<String>)

Only admin. Transfer tokens to the given recipient.

-
source

pub fn transfer( +NameTokenContractRef in casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts::name_token

Struct NameTokenContractRef

Source
pub struct NameTokenContractRef { /* private fields */ }
Expand description

NameToken Contract Ref.

+

Implementations§

Source§

impl NameTokenContractRef

Source

pub fn init(&mut self, name: String, symbol: String, max_supply: u64)

Initializes CEP95 with the given name and symbol.

+
Source

pub fn token_exists(&self, token_id: U256) -> bool

Source

pub fn mint( &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String>, - source_key: Address, - target_key: Address -)

Transfer token.

-
source

pub fn set_token_metadata( + recipient: Address, + token_id: U256, + token_metadata: Vec<(String, String)>, +)

Source

pub fn burn(&mut self, token_id: U256)

Source

pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>)

Source

pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256)

Source

pub fn set_token_metadata( &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String>, - token_meta_data: String -)

Only admin. Set token’s metadata.

-
source

pub fn metadata_by_hash(&self, token_hash: String) -> String

Return the metadata of the token with the given hash.

-
source

pub fn resolver(&self, token_hash: String) -> Option<Address>

Return the resolver of the token with the given hash.

-
source

pub fn set_resolver(&mut self, token_hash: String, resolver: Address)

Token owner only. Set the resolver of the token with the given hash.

-
source

pub fn assert_is_owner(&self, token_hash: &String, address: Address)

Check if the address is the owner of the token with the given hash.

-
source

pub fn is_token_valid(&self, token_hash: &String) -> bool

Check if the token with the given hash is expired.

-
source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

-
source

pub fn get_default_resolver(&self) -> Address

Get the default resolver.

-
source

pub fn get_collection_name(&self) -> String

Delegated. See self.token.get_collection_name() for details.

-
source

pub fn get_collection_symbol(&self) -> String

Delegated. See self.token.get_collection_symbol() for details.

-
source

pub fn set_variables( + token_id: U256, + token_metadata: Vec<(String, String)>, +)

Source

pub fn resolver(&self, token_id: U256) -> Option<Address>

Source

pub fn set_resolver(&mut self, token_id: U256, resolver: Address)

Source

pub fn assert_is_owner(&self, token_id: U256, address: Address)

Source

pub fn is_token_valid(&self, token_id: U256) -> bool

Source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

+
Source

pub fn get_default_resolver(&self) -> Address

Get the default resolver.

+
Source

pub fn whitelist(&mut self, address: Address)

Source

pub fn revoke_whitelist(&mut self, address: Address)

Source

pub fn name(&self) -> String

Delegated. See self.token.name() for details.

+
Source

pub fn symbol(&self) -> String

Delegated. See self.token.symbol() for details.

+
Source

pub fn balance_of(&self, owner: Address) -> U256

Delegated. See self.token.balance_of() for details.

+
Source

pub fn owner_of(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.owner_of() for details.

+
Source

pub fn safe_transfer_from( &mut self, - allow_minting: Maybe<bool>, - acl_whitelist: Maybe<Vec<Address>>, - operator_burn_mode: Maybe<bool> -)

Delegated. See self.token.set_variables() for details.

-
source

pub fn mint( - &mut self, - token_owner: Address, - token_meta_data: String, - token_hash: Maybe<String> -)

Delegated. See self.token.mint() for details.

-
source

pub fn approve( - &mut self, - spender: Address, - token_id: Maybe<u64>, - token_hash: Maybe<String> -)

Delegated. See self.token.approve() for details.

-
source

pub fn revoke(&mut self, token_id: Maybe<u64>, token_hash: Maybe<String>)

Delegated. See self.token.revoke() for details.

-
source

pub fn set_approval_for_all(&mut self, approve_all: bool, operator: Address)

Delegated. See self.token.set_approval_for_all() for details.

-
source

pub fn is_approved_for_all( - &mut self, - token_owner: Address, - operator: Address -) -> bool

Delegated. See self.token.is_approved_for_all() for details.

-
source

pub fn owner_of( - &self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> Address

Delegated. See self.token.owner_of() for details.

-
source

pub fn get_approved( - &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> Option<Address>

Delegated. See self.token.get_approved() for details.

-
source

pub fn metadata( - &self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> String

Delegated. See self.token.metadata() for details.

-
source

pub fn balance_of(&mut self, token_owner: Address) -> u64

Delegated. See self.token.balance_of() for details.

-
source

pub fn register_owner(&mut self, token_owner: Maybe<Address>) -> String

Delegated. See self.token.register_owner() for details.

-

Trait Implementations§

source§

impl ContractRef for NameTokenContractRef

source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

impl SchemaErrors for NameTokenContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for NameTokenContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ from: Address, + to: Address, + token_id: U256, + data: Option<Bytes>, +)

Delegated. See self.token.safe_transfer_from() for details.

+
Source

pub fn approve(&mut self, spender: Address, token_id: U256)

Delegated. See self.token.approve() for details.

+
Source

pub fn revoke_approval(&mut self, token_id: U256)

Delegated. See self.token.revoke_approval() for details.

+
Source

pub fn approved_for(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.approved_for() for details.

+
Source

pub fn approve_for_all(&mut self, operator: Address)

Delegated. See self.token.approve_for_all() for details.

+
Source

pub fn revoke_approval_for_all(&mut self, operator: Address)

Delegated. See self.token.revoke_approval_for_all() for details.

+
Source

pub fn is_approved_for_all(&self, owner: Address, operator: Address) -> bool

Delegated. See self.token.is_approved_for_all() for details.

+
Source

pub fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>

Delegated. See self.token.token_metadata() for details.

+
Source

pub fn get_owner(&self) -> Address

Delegated. See self.ownable.get_owner() for details.

+
Source

pub fn get_pending_owner(&self) -> Option<Address>

Delegated. See self.ownable.get_pending_owner() for details.

+
Source

pub fn transfer_ownership(&mut self, new_owner: &Address)

Delegated. See self.ownable.transfer_ownership() for details.

+
Source

pub fn accept_ownership(&mut self)

Delegated. See self.ownable.accept_ownership() for details.

+
Source

pub fn renounce_ownership(&mut self)

Delegated. See self.ownable.renounce_ownership() for details.

+

Trait Implementations§

Source§

impl ContractRef for NameTokenContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for NameTokenContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for NameTokenContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenHostRef.html b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenHostRef.html index 0477921..66c9f7d 100644 --- a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenHostRef.html +++ b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenHostRef.html @@ -1,203 +1,165 @@ -NameTokenHostRef in casper_name_contracts::contracts::name_token - Rust
pub struct NameTokenHostRef { /* private fields */ }
Expand description

NameToken Host Ref.

-

Implementations§

source§

impl NameTokenHostRef

source

pub fn init(&mut self, name: String, symbol: String)

Initializes CEP78 with the given name and symbol.

-
source

pub fn token_exists(&self, token_hash: &String) -> bool

Checks if a token with the given hash exists.

-
source

pub fn burn(&mut self, token_id: Maybe<u64>, token_hash: Maybe<String>)

Only admin. Burns the token with the given hash.

-
source

pub fn admin_transfer(&mut self, recipient: Address, token_hashes: Vec<String>)

Only admin. Transfer tokens to the given recipient.

-
source

pub fn transfer( - &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String>, - source_key: Address, - target_key: Address -)

Transfer token.

-
source

pub fn set_token_metadata( - &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String>, - token_meta_data: String -)

Only admin. Set token’s metadata.

-
source

pub fn metadata_by_hash(&self, token_hash: String) -> String

Return the metadata of the token with the given hash.

-
source

pub fn resolver(&self, token_hash: String) -> Option<Address>

Return the resolver of the token with the given hash.

-
source

pub fn set_resolver(&mut self, token_hash: String, resolver: Address)

Token owner only. Set the resolver of the token with the given hash.

-
source

pub fn assert_is_owner(&self, token_hash: &String, address: Address)

Check if the address is the owner of the token with the given hash.

-
source

pub fn is_token_valid(&self, token_hash: &String) -> bool

Check if the token with the given hash is expired.

-
source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

-
source

pub fn get_default_resolver(&self) -> Address

Get the default resolver.

-
source

pub fn get_collection_name(&self) -> String

Delegated. See self.token.get_collection_name() for details.

-
source

pub fn get_collection_symbol(&self) -> String

Delegated. See self.token.get_collection_symbol() for details.

-
source

pub fn set_variables( - &mut self, - allow_minting: Maybe<bool>, - acl_whitelist: Maybe<Vec<Address>>, - operator_burn_mode: Maybe<bool> -)

Delegated. See self.token.set_variables() for details.

-
source

pub fn mint( - &mut self, - token_owner: Address, - token_meta_data: String, - token_hash: Maybe<String> -)

Delegated. See self.token.mint() for details.

-
source

pub fn approve( - &mut self, - spender: Address, - token_id: Maybe<u64>, - token_hash: Maybe<String> -)

Delegated. See self.token.approve() for details.

-
source

pub fn revoke(&mut self, token_id: Maybe<u64>, token_hash: Maybe<String>)

Delegated. See self.token.revoke() for details.

-
source

pub fn set_approval_for_all(&mut self, approve_all: bool, operator: Address)

Delegated. See self.token.set_approval_for_all() for details.

-
source

pub fn is_approved_for_all( - &mut self, - token_owner: Address, - operator: Address -) -> bool

Delegated. See self.token.is_approved_for_all() for details.

-
source

pub fn owner_of( - &self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> Address

Delegated. See self.token.owner_of() for details.

-
source

pub fn get_approved( - &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> Option<Address>

Delegated. See self.token.get_approved() for details.

-
source

pub fn metadata( - &self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> String

Delegated. See self.token.metadata() for details.

-
source

pub fn balance_of(&mut self, token_owner: Address) -> u64

Delegated. See self.token.balance_of() for details.

-
source

pub fn register_owner(&mut self, token_owner: Maybe<Address>) -> String

Delegated. See self.token.register_owner() for details.

-
source§

impl NameTokenHostRef

source

pub fn try_init(&mut self, name: String, symbol: String) -> OdraResult<()>

Initializes CEP78 with the given name and symbol. -Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_token_exists(&self, token_hash: &String) -> OdraResult<bool>

Checks if a token with the given hash exists. -Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_burn( - &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> OdraResult<()>

Only admin. Burns the token with the given hash. -Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_admin_transfer( +NameTokenHostRef in casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts::name_token

Struct NameTokenHostRef

Source
pub struct NameTokenHostRef { /* private fields */ }
Expand description

NameToken Host Ref.

+

Implementations§

Source§

impl NameTokenHostRef

Source

pub fn init(&mut self, name: String, symbol: String, max_supply: u64)

Initializes CEP95 with the given name and symbol.

+
Source

pub fn token_exists(&self, token_id: U256) -> bool

Source

pub fn mint( &mut self, recipient: Address, - token_hashes: Vec<String> -) -> OdraResult<()>

Only admin. Transfer tokens to the given recipient. -Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_transfer( - &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String>, - source_key: Address, - target_key: Address -) -> OdraResult<()>

Transfer token. -Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_token_metadata( + token_id: U256, + token_metadata: Vec<(String, String)>, +)

Source

pub fn burn(&mut self, token_id: U256)

Source

pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>)

Source

pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256)

Source

pub fn set_token_metadata( + &mut self, + token_id: U256, + token_metadata: Vec<(String, String)>, +)

Source

pub fn resolver(&self, token_id: U256) -> Option<Address>

Source

pub fn set_resolver(&mut self, token_id: U256, resolver: Address)

Source

pub fn assert_is_owner(&self, token_id: U256, address: Address)

Source

pub fn is_token_valid(&self, token_id: U256) -> bool

Source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

+
Source

pub fn get_default_resolver(&self) -> Address

Get the default resolver.

+
Source

pub fn whitelist(&mut self, address: Address)

Source

pub fn revoke_whitelist(&mut self, address: Address)

Source

pub fn name(&self) -> String

Delegated. See self.token.name() for details.

+
Source

pub fn symbol(&self) -> String

Delegated. See self.token.symbol() for details.

+
Source

pub fn balance_of(&self, owner: Address) -> U256

Delegated. See self.token.balance_of() for details.

+
Source

pub fn owner_of(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.owner_of() for details.

+
Source

pub fn safe_transfer_from( + &mut self, + from: Address, + to: Address, + token_id: U256, + data: Option<Bytes>, +)

Delegated. See self.token.safe_transfer_from() for details.

+
Source

pub fn approve(&mut self, spender: Address, token_id: U256)

Delegated. See self.token.approve() for details.

+
Source

pub fn revoke_approval(&mut self, token_id: U256)

Delegated. See self.token.revoke_approval() for details.

+
Source

pub fn approved_for(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.approved_for() for details.

+
Source

pub fn approve_for_all(&mut self, operator: Address)

Delegated. See self.token.approve_for_all() for details.

+
Source

pub fn revoke_approval_for_all(&mut self, operator: Address)

Delegated. See self.token.revoke_approval_for_all() for details.

+
Source

pub fn is_approved_for_all(&self, owner: Address, operator: Address) -> bool

Delegated. See self.token.is_approved_for_all() for details.

+
Source

pub fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>

Delegated. See self.token.token_metadata() for details.

+
Source

pub fn get_owner(&self) -> Address

Delegated. See self.ownable.get_owner() for details.

+
Source

pub fn get_pending_owner(&self) -> Option<Address>

Delegated. See self.ownable.get_pending_owner() for details.

+
Source

pub fn transfer_ownership(&mut self, new_owner: &Address)

Delegated. See self.ownable.transfer_ownership() for details.

+
Source

pub fn accept_ownership(&mut self)

Delegated. See self.ownable.accept_ownership() for details.

+
Source

pub fn renounce_ownership(&mut self)

Delegated. See self.ownable.renounce_ownership() for details.

+
Source§

impl NameTokenHostRef

Source

pub fn try_init( + &mut self, + name: String, + symbol: String, + max_supply: u64, +) -> OdraResult<()>

Initializes CEP95 with the given name and symbol. +Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_token_exists(&self, token_id: U256) -> OdraResult<bool>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_mint( &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String>, - token_meta_data: String -) -> OdraResult<()>

Only admin. Set token’s metadata. -Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_metadata_by_hash(&self, token_hash: String) -> OdraResult<String>

Return the metadata of the token with the given hash. -Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_resolver(&self, token_hash: String) -> OdraResult<Option<Address>>

Return the resolver of the token with the given hash. -Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_resolver( + recipient: Address, + token_id: U256, + token_metadata: Vec<(String, String)>, +) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_burn(&mut self, token_id: U256) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_admin_transfer( &mut self, - token_hash: String, - resolver: Address -) -> OdraResult<()>

Token owner only. Set the resolver of the token with the given hash. -Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_assert_is_owner( + recipient: Address, + token_ids: Vec<U256>, +) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_transfer_from( + &mut self, + from: Address, + to: Address, + token_id: U256, +) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_set_token_metadata( + &mut self, + token_id: U256, + token_metadata: Vec<(String, String)>, +) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_resolver(&self, token_id: U256) -> OdraResult<Option<Address>>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_set_resolver( + &mut self, + token_id: U256, + resolver: Address, +) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_assert_is_owner( &self, - token_hash: &String, - address: Address -) -> OdraResult<()>

Check if the address is the owner of the token with the given hash. + token_id: U256, + address: Address, +) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_is_token_valid(&self, token_id: U256) -> OdraResult<bool>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_set_default_resolver(&mut self, resolver: Address) -> OdraResult<()>

Only admin. Set the default resolver. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_is_token_valid(&self, token_hash: &String) -> OdraResult<bool>

Check if the token with the given hash is expired. +

Source

pub fn try_get_default_resolver(&self) -> OdraResult<Address>

Get the default resolver. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_default_resolver(&mut self, resolver: Address) -> OdraResult<()>

Only admin. Set the default resolver. +

Source

pub fn try_whitelist(&mut self, address: Address) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_revoke_whitelist(&mut self, address: Address) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_name(&self) -> OdraResult<String>

Delegated. See self.token.name() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_get_default_resolver(&self) -> OdraResult<Address>

Get the default resolver. +

Source

pub fn try_symbol(&self) -> OdraResult<String>

Delegated. See self.token.symbol() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_get_collection_name(&self) -> OdraResult<String>

Delegated. See self.token.get_collection_name() for details. +

Source

pub fn try_balance_of(&self, owner: Address) -> OdraResult<U256>

Delegated. See self.token.balance_of() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_get_collection_symbol(&self) -> OdraResult<String>

Delegated. See self.token.get_collection_symbol() for details. +

Source

pub fn try_owner_of(&self, token_id: U256) -> OdraResult<Option<Address>>

Delegated. See self.token.owner_of() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_variables( +

Source

pub fn try_safe_transfer_from( &mut self, - allow_minting: Maybe<bool>, - acl_whitelist: Maybe<Vec<Address>>, - operator_burn_mode: Maybe<bool> -) -> OdraResult<()>

Delegated. See self.token.set_variables() for details. + from: Address, + to: Address, + token_id: U256, + data: Option<Bytes>, +) -> OdraResult<()>

Delegated. See self.token.safe_transfer_from() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_mint( - &mut self, - token_owner: Address, - token_meta_data: String, - token_hash: Maybe<String> -) -> OdraResult<()>

Delegated. See self.token.mint() for details. -Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_approve( +

Source

pub fn try_approve( &mut self, spender: Address, - token_id: Maybe<u64>, - token_hash: Maybe<String> + token_id: U256, ) -> OdraResult<()>

Delegated. See self.token.approve() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_revoke( - &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> OdraResult<()>

Delegated. See self.token.revoke() for details. +

Source

pub fn try_revoke_approval(&mut self, token_id: U256) -> OdraResult<()>

Delegated. See self.token.revoke_approval() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_approval_for_all( - &mut self, - approve_all: bool, - operator: Address -) -> OdraResult<()>

Delegated. See self.token.set_approval_for_all() for details. +

Source

pub fn try_approved_for(&self, token_id: U256) -> OdraResult<Option<Address>>

Delegated. See self.token.approved_for() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_is_approved_for_all( +

Source

pub fn try_approve_for_all(&mut self, operator: Address) -> OdraResult<()>

Delegated. See self.token.approve_for_all() for details. +Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_revoke_approval_for_all( &mut self, - token_owner: Address, - operator: Address + operator: Address, +) -> OdraResult<()>

Delegated. See self.token.revoke_approval_for_all() for details. +Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_is_approved_for_all( + &self, + owner: Address, + operator: Address, ) -> OdraResult<bool>

Delegated. See self.token.is_approved_for_all() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_owner_of( +

Source

pub fn try_token_metadata( &self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> OdraResult<Address>

Delegated. See self.token.owner_of() for details. + token_id: U256, +) -> OdraResult<Vec<(String, String)>>

Delegated. See self.token.token_metadata() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_get_approved( - &mut self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> OdraResult<Option<Address>>

Delegated. See self.token.get_approved() for details. +

Source

pub fn try_get_owner(&self) -> OdraResult<Address>

Delegated. See self.ownable.get_owner() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_metadata( - &self, - token_id: Maybe<u64>, - token_hash: Maybe<String> -) -> OdraResult<String>

Delegated. See self.token.metadata() for details. +

Source

pub fn try_get_pending_owner(&self) -> OdraResult<Option<Address>>

Delegated. See self.ownable.get_pending_owner() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_balance_of(&mut self, token_owner: Address) -> OdraResult<u64>

Delegated. See self.token.balance_of() for details. +

Source

pub fn try_transfer_ownership(&mut self, new_owner: &Address) -> OdraResult<()>

Delegated. See self.ownable.transfer_ownership() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_register_owner( - &mut self, - token_owner: Maybe<Address> -) -> OdraResult<String>

Delegated. See self.token.register_owner() for details. -Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

source§

impl EntryPointsCallerProvider for NameTokenHostRef

source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
source§

impl HasIdent for NameTokenHostRef

source§

fn ident() -> String

Returns the contract’s ident.
source§

impl HostRef for NameTokenHostRef

source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

fn env(&self) -> &HostEnv

Returns the host environment.
source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where - T: HostRef,

§

fn address(&self) -> &Address

Returns a reference to the [Address] of the type.
source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
Source

pub fn try_accept_ownership(&mut self) -> OdraResult<()>

Delegated. See self.ownable.accept_ownership() for details. +Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_renounce_ownership(&mut self) -> OdraResult<()>

Delegated. See self.ownable.renounce_ownership() for details. +Does not fail in case of error, returns odra::OdraResult instead.

+

Trait Implementations§

Source§

impl EntryPointsCallerProvider for NameTokenHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for NameTokenHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for NameTokenHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where + T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenInitArgs.html b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenInitArgs.html index efaa912..012e35a 100644 --- a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenInitArgs.html +++ b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenInitArgs.html @@ -1,15 +1,29 @@ -NameTokenInitArgs in casper_name_contracts::contracts::name_token - Rust
pub struct NameTokenInitArgs {
+NameTokenInitArgs in casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts::name_token

Struct NameTokenInitArgs

Source
pub struct NameTokenInitArgs {
     pub name: String,
     pub symbol: String,
+    pub max_supply: u64,
 }
Expand description

NameToken contract constructor arguments.

-

Fields§

§name: String§symbol: String

Trait Implementations§

source§

impl Into<RuntimeArgs> for NameTokenInitArgs

source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
source§

impl InitArgs for NameTokenInitArgs

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Fields§

§name: String§symbol: String§max_supply: u64

Trait Implementations§

Source§

impl Into<RuntimeArgs> for NameTokenInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for NameTokenInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/registrar/constant.CONTROLLER_ROLE.html b/docs/casper_name_contracts/contracts/registrar/constant.CONTROLLER_ROLE.html index 710ed70..48859c2 100644 --- a/docs/casper_name_contracts/contracts/registrar/constant.CONTROLLER_ROLE.html +++ b/docs/casper_name_contracts/contracts/registrar/constant.CONTROLLER_ROLE.html @@ -1 +1 @@ -CONTROLLER_ROLE in casper_name_contracts::contracts::registrar - Rust
pub const CONTROLLER_ROLE: Role;
\ No newline at end of file +CONTROLLER_ROLE in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Constant CONTROLLER_ROLE

Source
pub const CONTROLLER_ROLE: Role;
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/registrar/enum.RegistrarError.html b/docs/casper_name_contracts/contracts/registrar/enum.RegistrarError.html index f9f60cf..0ea8bea 100644 --- a/docs/casper_name_contracts/contracts/registrar/enum.RegistrarError.html +++ b/docs/casper_name_contracts/contracts/registrar/enum.RegistrarError.html @@ -1,17 +1,33 @@ -RegistrarError in casper_name_contracts::contracts::registrar - Rust
pub enum RegistrarError {
+RegistrarError in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Enum RegistrarError

Source
pub enum RegistrarError {
     ExpirationDateInThePast = 1_201,
     TokenNotExpired = 1_202,
     GracePeriodExpired = 1_203,
     VoucherExpired = 1_204,
     TokenDoesNotExist = 1_205,
-}

Variants§

§

ExpirationDateInThePast = 1_201

§

TokenNotExpired = 1_202

§

GracePeriodExpired = 1_203

§

VoucherExpired = 1_204

§

TokenDoesNotExist = 1_205

Trait Implementations§

source§

impl From<RegistrarError> for OdraError

source§

fn from(error: RegistrarError) -> Self

Converts to this type from the input type.
source§

impl SchemaErrors for RegistrarError

source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ GracePeriodTooLong = 1_206, + NameTokenIsNotValid = 1_207, + TokenNameIsNotValid = 1_208, +}

Variants§

§

ExpirationDateInThePast = 1_201

§

TokenNotExpired = 1_202

§

GracePeriodExpired = 1_203

§

VoucherExpired = 1_204

§

TokenDoesNotExist = 1_205

§

GracePeriodTooLong = 1_206

§

NameTokenIsNotValid = 1_207

§

TokenNameIsNotValid = 1_208

Trait Implementations§

Source§

impl From<RegistrarError> for OdraError

Source§

fn from(error: RegistrarError) -> Self

Converts to this type from the input type.
Source§

impl SchemaErrors for RegistrarError

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/registrar/index.html b/docs/casper_name_contracts/contracts/registrar/index.html index fbebcc9..edb2b7a 100644 --- a/docs/casper_name_contracts/contracts/registrar/index.html +++ b/docs/casper_name_contracts/contracts/registrar/index.html @@ -1 +1 @@ -casper_name_contracts::contracts::registrar - Rust

Module casper_name_contracts::contracts::registrar

source ·

Structs§

Enums§

Constants§

\ No newline at end of file +casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts

Module registrar

Source

Structs§

Enums§

Constants§

\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/registrar/sidebar-items.js b/docs/casper_name_contracts/contracts/registrar/sidebar-items.js index b46e483..5045847 100644 --- a/docs/casper_name_contracts/contracts/registrar/sidebar-items.js +++ b/docs/casper_name_contracts/contracts/registrar/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"constant":["CONTROLLER_ROLE"],"enum":["RegistrarError"],"struct":["Registrar","RegistrarContractRef","RegistrarHostRef","RegistrarInitArgs"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["CONTROLLER_ROLE"],"enum":["RegistrarError"],"struct":["GracePeriodChanged","Registrar","RegistrarContractRef","RegistrarHostRef","RegistrarInitArgs"]}; \ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/registrar/struct.GracePeriodChanged.html b/docs/casper_name_contracts/contracts/registrar/struct.GracePeriodChanged.html new file mode 100644 index 0000000..c020047 --- /dev/null +++ b/docs/casper_name_contracts/contracts/registrar/struct.GracePeriodChanged.html @@ -0,0 +1,32 @@ +GracePeriodChanged in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Struct GracePeriodChanged

Source
pub struct GracePeriodChanged { /* private fields */ }
Expand description

Event emitted when the grace period is changed.

+

Implementations§

Source§

impl GracePeriodChanged

Source

pub fn new(new_grace_period: u64) -> Self

Creates a new instance of the GracePeriodChanged event.

+

Trait Implementations§

Source§

impl CLTyped for GracePeriodChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for GracePeriodChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for GracePeriodChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for GracePeriodChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for GracePeriodChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for GracePeriodChanged

Source§

fn eq(&self, other: &GracePeriodChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for GracePeriodChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for GracePeriodChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +to_bytes() or into_bytes(). The data is not actually serialized, so this call is +relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for GracePeriodChanged

Source§

impl StructuralPartialEq for GracePeriodChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoEvent for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/registrar/struct.Registrar.html b/docs/casper_name_contracts/contracts/registrar/struct.Registrar.html index f0a672d..80ed055 100644 --- a/docs/casper_name_contracts/contracts/registrar/struct.Registrar.html +++ b/docs/casper_name_contracts/contracts/registrar/struct.Registrar.html @@ -1,46 +1,73 @@ -Registrar in casper_name_contracts::contracts::registrar - Rust

Struct casper_name_contracts::contracts::registrar::Registrar

source ·
pub struct Registrar { /* private fields */ }
Expand description

Registrar smart contract. It handles the registration and expiration of name tokens.

-

Implementations§

source§

impl Registrar

source

pub fn init(&mut self, name_token: Address)

Initializes the registrar with the name token contract address.

-
source

pub fn grace_period(&self) -> u64

Returns the grace period.

-
source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

-
source

pub fn expire(&mut self, token_hashes: Vec<String>)

Expire a list of tokens if they are expired.

-
source

pub fn set_grace_period(&mut self, period: u64)

Admin only. Sets the grace period.

-
source

pub fn admin_transfer(&mut self, new_owner: Address, token_hashes: Vec<String>)

Admin only. Transfer ownership of a list of tokens.

-
source

pub fn admin_burn(&mut self, token_hashes: Vec<String>)

Admin only. Burn a list of tokens.

-
source

pub fn admin_prolong(&mut self, tokens: Vec<TokenRenewalInfo>)

Admin only. Prolong the expiration date of a list of tokens.

-
source

pub fn admin_register(&mut self, names: Vec<NameMintInfo>)

Admin only. Register a list of tokens.

-
source

pub fn admin_prolong_and_register( +Registrar in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Struct Registrar

Source
pub struct Registrar { /* private fields */ }
Expand description

Registrar smart contract. It handles the registration and expiration of name tokens.

+

Implementations§

Source§

impl Registrar

Source

pub fn init(&mut self, name_token: Address)

Initializes the registrar with the name token contract address.

+
Source

pub fn pause(&mut self)

Temporarily stops the contract.

+
Source

pub fn unpause(&mut self)

Returns to normal operation.

+
Source

pub fn grace_period(&self) -> u64

Returns the grace period.

+
Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

+
Source

pub fn expire(&mut self, token_ids: Vec<U256>)

Expire a list of tokens if they are expired.

+
Source

pub fn set_grace_period(&mut self, period: u64)

Admin only. Sets the grace period.

+
Source

pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>)

Admin only. Transfer ownership of a list of tokens.

+
Source

pub fn admin_burn(&mut self, token_ids: Vec<U256>)

Admin only. Burn a list of tokens.

+
Source

pub fn admin_prolong(&mut self, tokens: Vec<TokenRenewalInfo>)

Admin only. Prolong the expiration date of a list of tokens.

+
Source

pub fn admin_register(&mut self, names: Vec<NameMintInfo>)

Admin only. Register a list of tokens.

+
Source

pub fn admin_prolong_and_register( &mut self, renewal_tokens: Vec<TokenRenewalInfo>, - new_tokens: Vec<NameMintInfo> + new_tokens: Vec<NameMintInfo>, )

Admin only. Prolong the expiration date of a list of tokens and register a list of tokens.

-
source

pub fn controller_prolong(&mut self, voucher: RenewalVoucher)

Controller only. Prolong the expiration date of a list of tokens.

-
source

pub fn controller_register(&mut self, voucher: TokenizationVoucher)

Controller only. Register a list of tokens.

-
source

pub fn controller_prolong_and_register( +

Source

pub fn controller_prolong(&mut self, voucher: RenewalVoucher)

Controller only. Prolong the expiration date of a list of tokens.

+
Source

pub fn controller_register(&mut self, voucher: TokenizationVoucher)

Controller only. Register a list of tokens.

+
Source

pub fn controller_prolong_and_register( &mut self, renewal_voucher: RenewalVoucher, - tokenization_voucher: TokenizationVoucher + tokenization_voucher: TokenizationVoucher, )

Controller only. Prolong the expiration date of a list of tokens and register a list of tokens.

-
source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

-
source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

-
source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

-

Trait Implementations§

source§

impl HasEntrypoints for Registrar

source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
source§

impl HasEvents for Registrar

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl HasIdent for Registrar

source§

fn ident() -> String

Returns the contract’s ident.
source§

impl Module for Registrar

source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
source§

impl OdraContract for Registrar

§

type HostRef = RegistrarHostRef

The host reference type.
§

type ContractRef = RegistrarContractRef

The contract reference type.
§

type InitArgs = RegistrarInitArgs

The init args type.
source§

impl SchemaCustomTypes for Registrar

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl SchemaEntrypoints for Registrar

source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
source§

impl SchemaErrors for Registrar

source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for Registrar

source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<R> Deployer<R> for R
where +

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

+
Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

+
Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

+
Source

pub fn is_paused(&self) -> bool

Delegated. See self.pauseable.is_paused() for details.

+

Trait Implementations§

Source§

impl HasEntrypoints for Registrar

Source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
Source§

impl HasEvents for Registrar

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl HasIdent for Registrar

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl Module for Registrar

Source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
Source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
Source§

impl OdraContract for Registrar

Source§

type HostRef = RegistrarHostRef

The host reference type.
Source§

type ContractRef = RegistrarContractRef

The contract reference type.
Source§

type InitArgs = RegistrarInitArgs

The init args type.
Source§

impl SchemaCustomTypes for Registrar

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl SchemaEntrypoints for Registrar

Source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
Source§

impl SchemaErrors for Registrar

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for Registrar

Source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
Source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<R> Deployer<R> for R
where R: OdraContract,

§

fn deploy( env: &HostEnv, - init_args: <R as OdraContract>::InitArgs + init_args: <R as OdraContract>::InitArgs, ) -> <R as OdraContract>::HostRef

Deploys a contract with given init args. Read more
§

fn try_deploy( env: &HostEnv, - init_args: <R as OdraContract>::InitArgs -) -> Result<<R as OdraContract>::HostRef, OdraError>

Tries to deploy a contract with given init args. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+ init_args: <R as OdraContract>::InitArgs, +) -> Result<<R as OdraContract>::HostRef, OdraError>
Tries to deploy a contract with given init args. Read more
§

fn deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> <R as OdraContract>::HostRef
where + T: OdraConfig,

Deploys a contract with given init args and configuration. Read more
§

fn try_deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> Result<<R as OdraContract>::HostRef, OdraError>
where + T: OdraConfig,

Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where - T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ T: OdraContract,
§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
§

impl<T> Revertible for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where - E: Into<OdraError>,

Reverts the contract execution with the given error.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + E: Into<OdraError>,
Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarContractRef.html b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarContractRef.html index 74cbf1b..fc2bf60 100644 --- a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarContractRef.html +++ b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarContractRef.html @@ -1,36 +1,52 @@ -RegistrarContractRef in casper_name_contracts::contracts::registrar - Rust
pub struct RegistrarContractRef { /* private fields */ }
Expand description

Registrar Contract Ref.

-

Implementations§

source§

impl RegistrarContractRef

source

pub fn init(&mut self, name_token: Address)

Initializes the registrar with the name token contract address.

-
source

pub fn grace_period(&self) -> u64

Returns the grace period.

-
source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

-
source

pub fn expire(&mut self, token_hashes: Vec<String>)

Expire a list of tokens if they are expired.

-
source

pub fn set_grace_period(&mut self, period: u64)

Admin only. Sets the grace period.

-
source

pub fn admin_transfer(&mut self, new_owner: Address, token_hashes: Vec<String>)

Admin only. Transfer ownership of a list of tokens.

-
source

pub fn admin_burn(&mut self, token_hashes: Vec<String>)

Admin only. Burn a list of tokens.

-
source

pub fn admin_prolong(&mut self, tokens: Vec<TokenRenewalInfo>)

Admin only. Prolong the expiration date of a list of tokens.

-
source

pub fn admin_register(&mut self, names: Vec<NameMintInfo>)

Admin only. Register a list of tokens.

-
source

pub fn admin_prolong_and_register( +RegistrarContractRef in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Struct RegistrarContractRef

Source
pub struct RegistrarContractRef { /* private fields */ }
Expand description

Registrar Contract Ref.

+

Implementations§

Source§

impl RegistrarContractRef

Source

pub fn init(&mut self, name_token: Address)

Initializes the registrar with the name token contract address.

+
Source

pub fn pause(&mut self)

Temporarily stops the contract.

+
Source

pub fn unpause(&mut self)

Returns to normal operation.

+
Source

pub fn grace_period(&self) -> u64

Returns the grace period.

+
Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

+
Source

pub fn expire(&mut self, token_ids: Vec<U256>)

Expire a list of tokens if they are expired.

+
Source

pub fn set_grace_period(&mut self, period: u64)

Admin only. Sets the grace period.

+
Source

pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>)

Admin only. Transfer ownership of a list of tokens.

+
Source

pub fn admin_burn(&mut self, token_ids: Vec<U256>)

Admin only. Burn a list of tokens.

+
Source

pub fn admin_prolong(&mut self, tokens: Vec<TokenRenewalInfo>)

Admin only. Prolong the expiration date of a list of tokens.

+
Source

pub fn admin_register(&mut self, names: Vec<NameMintInfo>)

Admin only. Register a list of tokens.

+
Source

pub fn admin_prolong_and_register( &mut self, renewal_tokens: Vec<TokenRenewalInfo>, - new_tokens: Vec<NameMintInfo> + new_tokens: Vec<NameMintInfo>, )

Admin only. Prolong the expiration date of a list of tokens and register a list of tokens.

-
source

pub fn controller_prolong(&mut self, voucher: RenewalVoucher)

Controller only. Prolong the expiration date of a list of tokens.

-
source

pub fn controller_register(&mut self, voucher: TokenizationVoucher)

Controller only. Register a list of tokens.

-
source

pub fn controller_prolong_and_register( +

Source

pub fn controller_prolong(&mut self, voucher: RenewalVoucher)

Controller only. Prolong the expiration date of a list of tokens.

+
Source

pub fn controller_register(&mut self, voucher: TokenizationVoucher)

Controller only. Register a list of tokens.

+
Source

pub fn controller_prolong_and_register( &mut self, renewal_voucher: RenewalVoucher, - tokenization_voucher: TokenizationVoucher + tokenization_voucher: TokenizationVoucher, )

Controller only. Prolong the expiration date of a list of tokens and register a list of tokens.

-
source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

-
source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

-
source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

-

Trait Implementations§

source§

impl ContractRef for RegistrarContractRef

source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

impl SchemaErrors for RegistrarContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for RegistrarContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

+
Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

+
Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

+
Source

pub fn is_paused(&self) -> bool

Delegated. See self.pauseable.is_paused() for details.

+

Trait Implementations§

Source§

impl ContractRef for RegistrarContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for RegistrarContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for RegistrarContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarHostRef.html b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarHostRef.html index b520a90..ffcf9c5 100644 --- a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarHostRef.html +++ b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarHostRef.html @@ -1,99 +1,121 @@ -RegistrarHostRef in casper_name_contracts::contracts::registrar - Rust
pub struct RegistrarHostRef { /* private fields */ }
Expand description

Registrar Host Ref.

-

Implementations§

source§

impl RegistrarHostRef

source

pub fn init(&mut self, name_token: Address)

Initializes the registrar with the name token contract address.

-
source

pub fn grace_period(&self) -> u64

Returns the grace period.

-
source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

-
source

pub fn expire(&mut self, token_hashes: Vec<String>)

Expire a list of tokens if they are expired.

-
source

pub fn set_grace_period(&mut self, period: u64)

Admin only. Sets the grace period.

-
source

pub fn admin_transfer(&mut self, new_owner: Address, token_hashes: Vec<String>)

Admin only. Transfer ownership of a list of tokens.

-
source

pub fn admin_burn(&mut self, token_hashes: Vec<String>)

Admin only. Burn a list of tokens.

-
source

pub fn admin_prolong(&mut self, tokens: Vec<TokenRenewalInfo>)

Admin only. Prolong the expiration date of a list of tokens.

-
source

pub fn admin_register(&mut self, names: Vec<NameMintInfo>)

Admin only. Register a list of tokens.

-
source

pub fn admin_prolong_and_register( +RegistrarHostRef in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Struct RegistrarHostRef

Source
pub struct RegistrarHostRef { /* private fields */ }
Expand description

Registrar Host Ref.

+

Implementations§

Source§

impl RegistrarHostRef

Source

pub fn init(&mut self, name_token: Address)

Initializes the registrar with the name token contract address.

+
Source

pub fn pause(&mut self)

Temporarily stops the contract.

+
Source

pub fn unpause(&mut self)

Returns to normal operation.

+
Source

pub fn grace_period(&self) -> u64

Returns the grace period.

+
Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

+
Source

pub fn expire(&mut self, token_ids: Vec<U256>)

Expire a list of tokens if they are expired.

+
Source

pub fn set_grace_period(&mut self, period: u64)

Admin only. Sets the grace period.

+
Source

pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>)

Admin only. Transfer ownership of a list of tokens.

+
Source

pub fn admin_burn(&mut self, token_ids: Vec<U256>)

Admin only. Burn a list of tokens.

+
Source

pub fn admin_prolong(&mut self, tokens: Vec<TokenRenewalInfo>)

Admin only. Prolong the expiration date of a list of tokens.

+
Source

pub fn admin_register(&mut self, names: Vec<NameMintInfo>)

Admin only. Register a list of tokens.

+
Source

pub fn admin_prolong_and_register( &mut self, renewal_tokens: Vec<TokenRenewalInfo>, - new_tokens: Vec<NameMintInfo> + new_tokens: Vec<NameMintInfo>, )

Admin only. Prolong the expiration date of a list of tokens and register a list of tokens.

-
source

pub fn controller_prolong(&mut self, voucher: RenewalVoucher)

Controller only. Prolong the expiration date of a list of tokens.

-
source

pub fn controller_register(&mut self, voucher: TokenizationVoucher)

Controller only. Register a list of tokens.

-
source

pub fn controller_prolong_and_register( +

Source

pub fn controller_prolong(&mut self, voucher: RenewalVoucher)

Controller only. Prolong the expiration date of a list of tokens.

+
Source

pub fn controller_register(&mut self, voucher: TokenizationVoucher)

Controller only. Register a list of tokens.

+
Source

pub fn controller_prolong_and_register( &mut self, renewal_voucher: RenewalVoucher, - tokenization_voucher: TokenizationVoucher + tokenization_voucher: TokenizationVoucher, )

Controller only. Prolong the expiration date of a list of tokens and register a list of tokens.

-
source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

-
source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

-
source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

-

source§

impl RegistrarHostRef

source

pub fn try_init(&mut self, name_token: Address) -> OdraResult<()>

Initializes the registrar with the name token contract address. +

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

+
Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

+
Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

+
Source

pub fn is_paused(&self) -> bool

Delegated. See self.pauseable.is_paused() for details.

+
Source§

impl RegistrarHostRef

Source

pub fn try_init(&mut self, name_token: Address) -> OdraResult<()>

Initializes the registrar with the name token contract address. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_grace_period(&self) -> OdraResult<u64>

Returns the grace period. +

Source

pub fn try_pause(&mut self) -> OdraResult<()>

Temporarily stops the contract. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Try to resolve a full domain name to an address. +

Source

pub fn try_unpause(&mut self) -> OdraResult<()>

Returns to normal operation. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_expire(&mut self, token_hashes: Vec<String>) -> OdraResult<()>

Expire a list of tokens if they are expired. +

Source

pub fn try_grace_period(&self) -> OdraResult<u64>

Returns the grace period. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_grace_period(&mut self, period: u64) -> OdraResult<()>

Admin only. Sets the grace period. +

Source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Try to resolve a full domain name to an address. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_admin_transfer( +

Source

pub fn try_expire(&mut self, token_ids: Vec<U256>) -> OdraResult<()>

Expire a list of tokens if they are expired. +Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_set_grace_period(&mut self, period: u64) -> OdraResult<()>

Admin only. Sets the grace period. +Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_admin_transfer( &mut self, new_owner: Address, - token_hashes: Vec<String> + token_ids: Vec<U256>, ) -> OdraResult<()>

Admin only. Transfer ownership of a list of tokens. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_admin_burn(&mut self, token_hashes: Vec<String>) -> OdraResult<()>

Admin only. Burn a list of tokens. +

Source

pub fn try_admin_burn(&mut self, token_ids: Vec<U256>) -> OdraResult<()>

Admin only. Burn a list of tokens. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_admin_prolong( +

Source

pub fn try_admin_prolong( &mut self, - tokens: Vec<TokenRenewalInfo> + tokens: Vec<TokenRenewalInfo>, ) -> OdraResult<()>

Admin only. Prolong the expiration date of a list of tokens. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_admin_register(&mut self, names: Vec<NameMintInfo>) -> OdraResult<()>

Admin only. Register a list of tokens. +

Source

pub fn try_admin_register(&mut self, names: Vec<NameMintInfo>) -> OdraResult<()>

Admin only. Register a list of tokens. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_admin_prolong_and_register( +

Source

pub fn try_admin_prolong_and_register( &mut self, renewal_tokens: Vec<TokenRenewalInfo>, - new_tokens: Vec<NameMintInfo> + new_tokens: Vec<NameMintInfo>, ) -> OdraResult<()>

Admin only. Prolong the expiration date of a list of tokens and register a list of tokens. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_controller_prolong( +

Source

pub fn try_controller_prolong( &mut self, - voucher: RenewalVoucher + voucher: RenewalVoucher, ) -> OdraResult<()>

Controller only. Prolong the expiration date of a list of tokens. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_controller_register( +

Source

pub fn try_controller_register( &mut self, - voucher: TokenizationVoucher + voucher: TokenizationVoucher, ) -> OdraResult<()>

Controller only. Register a list of tokens. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_controller_prolong_and_register( +

Source

pub fn try_controller_prolong_and_register( &mut self, renewal_voucher: RenewalVoucher, - tokenization_voucher: TokenizationVoucher + tokenization_voucher: TokenizationVoucher, ) -> OdraResult<()>

Controller only. Prolong the expiration date of a list of tokens and register a list of tokens. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_has_role(&self, role: &Role, address: &Address) -> OdraResult<bool>

Delegated. See self.access_control.has_role() for details. +

Source

pub fn try_has_role(&self, role: &Role, address: &Address) -> OdraResult<bool>

Delegated. See self.access_control.has_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_grant_role( +

Source

pub fn try_grant_role( &mut self, role: &Role, - address: &Address + address: &Address, ) -> OdraResult<()>

Delegated. See self.access_control.grant_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_revoke_role( +

Source

pub fn try_revoke_role( &mut self, role: &Role, - address: &Address + address: &Address, ) -> OdraResult<()>

Delegated. See self.access_control.revoke_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

source§

impl EntryPointsCallerProvider for RegistrarHostRef

source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
source§

impl HasIdent for RegistrarHostRef

source§

fn ident() -> String

Returns the contract’s ident.
source§

impl HostRef for RegistrarHostRef

source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

fn env(&self) -> &HostEnv

Returns the host environment.
source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where - T: HostRef,

§

fn address(&self) -> &Address

Returns a reference to the [Address] of the type.
source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
Source

pub fn try_is_paused(&self) -> OdraResult<bool>

Delegated. See self.pauseable.is_paused() for details. +Does not fail in case of error, returns odra::OdraResult instead.

+

Trait Implementations§

Source§

impl EntryPointsCallerProvider for RegistrarHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for RegistrarHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for RegistrarHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where + T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarInitArgs.html b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarInitArgs.html index ca797a9..d0e3ae1 100644 --- a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarInitArgs.html +++ b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarInitArgs.html @@ -1,14 +1,27 @@ -RegistrarInitArgs in casper_name_contracts::contracts::registrar - Rust
pub struct RegistrarInitArgs {
+RegistrarInitArgs in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Struct RegistrarInitArgs

Source
pub struct RegistrarInitArgs {
     pub name_token: Address,
 }
Expand description

Registrar contract constructor arguments.

-

Fields§

§name_token: Address

Trait Implementations§

source§

impl Into<RuntimeArgs> for RegistrarInitArgs

source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
source§

impl InitArgs for RegistrarInitArgs

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Fields§

§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for RegistrarInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for RegistrarInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/enum.ResolverError.html b/docs/casper_name_contracts/contracts/resolver/enum.ResolverError.html index 24f0c93..5df8e59 100644 --- a/docs/casper_name_contracts/contracts/resolver/enum.ResolverError.html +++ b/docs/casper_name_contracts/contracts/resolver/enum.ResolverError.html @@ -1,17 +1,32 @@ -ResolverError in casper_name_contracts::contracts::resolver - Rust
pub enum ResolverError {
+ResolverError in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Enum ResolverError

Source
pub enum ResolverError {
     ResolutionSetWithInvalidToken = 1_401,
     ResolutionSetByInvalidOwner = 1_402,
-    UnauthorizedCleanup = 1_403,
+    UnauthorizedInvalidation = 1_403,
     UnauthorizedTokenAddressUpdate = 1_404,
     InvalidDomain = 1_405,
-}

Variants§

§

ResolutionSetWithInvalidToken = 1_401

§

ResolutionSetByInvalidOwner = 1_402

§

UnauthorizedCleanup = 1_403

§

UnauthorizedTokenAddressUpdate = 1_404

§

InvalidDomain = 1_405

Trait Implementations§

source§

impl From<ResolverError> for OdraError

source§

fn from(error: ResolverError) -> Self

Converts to this type from the input type.
source§

impl SchemaErrors for ResolverError

source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ InvalidSubdomainFormat = 1_406, + InvalidTokenName = 1_407, +}

Variants§

§

ResolutionSetWithInvalidToken = 1_401

§

ResolutionSetByInvalidOwner = 1_402

§

UnauthorizedInvalidation = 1_403

§

UnauthorizedTokenAddressUpdate = 1_404

§

InvalidDomain = 1_405

§

InvalidSubdomainFormat = 1_406

§

InvalidTokenName = 1_407

Trait Implementations§

Source§

impl From<ResolverError> for OdraError

Source§

fn from(error: ResolverError) -> Self

Converts to this type from the input type.
Source§

impl SchemaErrors for ResolverError

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/index.html b/docs/casper_name_contracts/contracts/resolver/index.html index 95c4383..df0bbd3 100644 --- a/docs/casper_name_contracts/contracts/resolver/index.html +++ b/docs/casper_name_contracts/contracts/resolver/index.html @@ -1 +1 @@ -casper_name_contracts::contracts::resolver - Rust

Module casper_name_contracts::contracts::resolver

source ·

Structs§

Enums§

\ No newline at end of file +casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts

Module resolver

Source

Structs§

Enums§

\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/sidebar-items.js b/docs/casper_name_contracts/contracts/resolver/sidebar-items.js index 77ad335..992aaea 100644 --- a/docs/casper_name_contracts/contracts/resolver/sidebar-items.js +++ b/docs/casper_name_contracts/contracts/resolver/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"enum":["ResolverError"],"struct":["DefaultResolver","DefaultResolverContractRef","DefaultResolverHostRef","DefaultResolverInitArgs","ResolutionChanged","ResolutionCleared","ResolverContractRef","ResolverHostRef"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["ResolverError"],"struct":["DefaultResolver","DefaultResolverContractRef","DefaultResolverHostRef","DefaultResolverInitArgs","NameTokenAddressChanged","ResolutionChanged","ResolutionCleared","ResolverContractRef","ResolverHostRef"]}; \ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolver.html b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolver.html index 22fa566..2baa098 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolver.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolver.html @@ -1,31 +1,55 @@ -DefaultResolver in casper_name_contracts::contracts::resolver - Rust
pub struct DefaultResolver { /* private fields */ }
Expand description

Default Resolver smart contract. It handles the resolution of domain names to addresses.

-

Implementations§

source§

impl DefaultResolver

source

pub fn init(&mut self, name_token: Address)

Initializes the default resolver with the name token contract address. +DefaultResolver in casper_name_contracts::contracts::resolver - Rust

casper_name_contracts::contracts::resolver

Struct DefaultResolver

Source
pub struct DefaultResolver { /* private fields */ }
Expand description

Default Resolver smart contract. It handles the resolution of domain names to addresses.

+

Implementations§

Source§

impl DefaultResolver

Source

pub fn init(&mut self, name_token: Address)

Initializes the default resolver with the name token contract address. The caller is granted the admin role.

-
source

pub fn set_name_token(&mut self, name_token: Address)

Admin only. Sets the name token contract address.

-
source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Token owner only. Sets the resolution for a domain to an address.

-
source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Resolves a domain to an address.

-
source

pub fn cleanup(&mut self, token_hash: String)

Cleanup the resolutions for a token. Only the token owner or the admin can do this.

-
source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

-
source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

-
source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

-

Trait Implementations§

source§

impl HasEntrypoints for DefaultResolver

source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
source§

impl HasEvents for DefaultResolver

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl HasIdent for DefaultResolver

source§

fn ident() -> String

Returns the contract’s ident.
source§

impl Module for DefaultResolver

source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
source§

impl OdraContract for DefaultResolver

§

type HostRef = DefaultResolverHostRef

The host reference type.
§

type ContractRef = DefaultResolverContractRef

The contract reference type.
§

type InitArgs = DefaultResolverInitArgs

The init args type.
source§

impl SchemaCustomTypes for DefaultResolver

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl SchemaEntrypoints for DefaultResolver

source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
source§

impl SchemaErrors for DefaultResolver

source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for DefaultResolver

source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<R> Deployer<R> for R
where +

Source

pub fn set_name_token(&mut self, name_token: Address)

Admin only. Sets the name token contract address.

+
Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Token owner only. Sets the resolution for a domain to an address.

+
Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Resolves a domain to an address.

+
Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Invalidates all the resolutions for a token. Only the token owner or the admin can do this.

+
Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

+
Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

+
Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

+

Trait Implementations§

Source§

impl HasEntrypoints for DefaultResolver

Source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
Source§

impl HasEvents for DefaultResolver

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl HasIdent for DefaultResolver

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl Module for DefaultResolver

Source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
Source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
Source§

impl OdraContract for DefaultResolver

Source§

type HostRef = DefaultResolverHostRef

The host reference type.
Source§

type ContractRef = DefaultResolverContractRef

The contract reference type.
Source§

type InitArgs = DefaultResolverInitArgs

The init args type.
Source§

impl SchemaCustomTypes for DefaultResolver

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl SchemaEntrypoints for DefaultResolver

Source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
Source§

impl SchemaErrors for DefaultResolver

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for DefaultResolver

Source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
Source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<R> Deployer<R> for R
where R: OdraContract,

§

fn deploy( env: &HostEnv, - init_args: <R as OdraContract>::InitArgs + init_args: <R as OdraContract>::InitArgs, ) -> <R as OdraContract>::HostRef

Deploys a contract with given init args. Read more
§

fn try_deploy( env: &HostEnv, - init_args: <R as OdraContract>::InitArgs -) -> Result<<R as OdraContract>::HostRef, OdraError>

Tries to deploy a contract with given init args. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+ init_args: <R as OdraContract>::InitArgs, +) -> Result<<R as OdraContract>::HostRef, OdraError>
Tries to deploy a contract with given init args. Read more
§

fn deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> <R as OdraContract>::HostRef
where + T: OdraConfig,

Deploys a contract with given init args and configuration. Read more
§

fn try_deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> Result<<R as OdraContract>::HostRef, OdraError>
where + T: OdraConfig,

Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where - T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ T: OdraContract,
§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
§

impl<T> Revertible for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where - E: Into<OdraError>,

Reverts the contract execution with the given error.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + E: Into<OdraError>,
Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverContractRef.html b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverContractRef.html index 694b46d..3b7beb4 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverContractRef.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverContractRef.html @@ -1,21 +1,34 @@ -DefaultResolverContractRef in casper_name_contracts::contracts::resolver - Rust
pub struct DefaultResolverContractRef { /* private fields */ }
Expand description

DefaultResolver Contract Ref.

-

Implementations§

source§

impl DefaultResolverContractRef

source

pub fn init(&mut self, name_token: Address)

Initializes the default resolver with the name token contract address. +DefaultResolverContractRef in casper_name_contracts::contracts::resolver - Rust

casper_name_contracts::contracts::resolver

Struct DefaultResolverContractRef

Source
pub struct DefaultResolverContractRef { /* private fields */ }
Expand description

DefaultResolver Contract Ref.

+

Implementations§

Source§

impl DefaultResolverContractRef

Source

pub fn init(&mut self, name_token: Address)

Initializes the default resolver with the name token contract address. The caller is granted the admin role.

-
source

pub fn set_name_token(&mut self, name_token: Address)

Admin only. Sets the name token contract address.

-
source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Token owner only. Sets the resolution for a domain to an address.

-
source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Resolves a domain to an address.

-
source

pub fn cleanup(&mut self, token_hash: String)

Cleanup the resolutions for a token. Only the token owner or the admin can do this.

-
source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

-
source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

-
source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

-

Trait Implementations§

source§

impl ContractRef for DefaultResolverContractRef

source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

impl SchemaErrors for DefaultResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for DefaultResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
Source

pub fn set_name_token(&mut self, name_token: Address)

Admin only. Sets the name token contract address.

+
Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Token owner only. Sets the resolution for a domain to an address.

+
Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Resolves a domain to an address.

+
Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Invalidates all the resolutions for a token. Only the token owner or the admin can do this.

+
Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

+
Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

+
Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

+

Trait Implementations§

Source§

impl ContractRef for DefaultResolverContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for DefaultResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for DefaultResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverHostRef.html b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverHostRef.html index 319cc74..28b0d7e 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverHostRef.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverHostRef.html @@ -1,52 +1,65 @@ -DefaultResolverHostRef in casper_name_contracts::contracts::resolver - Rust
pub struct DefaultResolverHostRef { /* private fields */ }
Expand description

DefaultResolver Host Ref.

-

Implementations§

source§

impl DefaultResolverHostRef

source

pub fn init(&mut self, name_token: Address)

Initializes the default resolver with the name token contract address. +DefaultResolverHostRef in casper_name_contracts::contracts::resolver - Rust

casper_name_contracts::contracts::resolver

Struct DefaultResolverHostRef

Source
pub struct DefaultResolverHostRef { /* private fields */ }
Expand description

DefaultResolver Host Ref.

+

Implementations§

Source§

impl DefaultResolverHostRef

Source

pub fn init(&mut self, name_token: Address)

Initializes the default resolver with the name token contract address. The caller is granted the admin role.

-
source

pub fn set_name_token(&mut self, name_token: Address)

Admin only. Sets the name token contract address.

-
source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Token owner only. Sets the resolution for a domain to an address.

-
source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Resolves a domain to an address.

-
source

pub fn cleanup(&mut self, token_hash: String)

Cleanup the resolutions for a token. Only the token owner or the admin can do this.

-
source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

-
source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

-
source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

-
source§

impl DefaultResolverHostRef

source

pub fn try_init(&mut self, name_token: Address) -> OdraResult<()>

Initializes the default resolver with the name token contract address. +

Source

pub fn set_name_token(&mut self, name_token: Address)

Admin only. Sets the name token contract address.

+
Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Token owner only. Sets the resolution for a domain to an address.

+
Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Resolves a domain to an address.

+
Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Invalidates all the resolutions for a token. Only the token owner or the admin can do this.

+
Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

+
Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

+
Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

+
Source§

impl DefaultResolverHostRef

Source

pub fn try_init(&mut self, name_token: Address) -> OdraResult<()>

Initializes the default resolver with the name token contract address. The caller is granted the admin role. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_name_token(&mut self, name_token: Address) -> OdraResult<()>

Admin only. Sets the name token contract address. +

Source

pub fn try_set_name_token(&mut self, name_token: Address) -> OdraResult<()>

Admin only. Sets the name token contract address. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_resolution( +

Source

pub fn try_set_resolution( &mut self, full_domain: String, - address: Option<Address> + address: Option<Address>, ) -> OdraResult<()>

Token owner only. Sets the resolution for a domain to an address. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Resolves a domain to an address. +

Source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Resolves a domain to an address. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_cleanup(&mut self, token_hash: String) -> OdraResult<()>

Cleanup the resolutions for a token. Only the token owner or the admin can do this. +

Source

pub fn try_invalidate_resolutions(&mut self, token_id: U256) -> OdraResult<()>

Invalidates all the resolutions for a token. Only the token owner or the admin can do this. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_has_role(&self, role: &Role, address: &Address) -> OdraResult<bool>

Delegated. See self.access_control.has_role() for details. +

Source

pub fn try_has_role(&self, role: &Role, address: &Address) -> OdraResult<bool>

Delegated. See self.access_control.has_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_grant_role( +

Source

pub fn try_grant_role( &mut self, role: &Role, - address: &Address + address: &Address, ) -> OdraResult<()>

Delegated. See self.access_control.grant_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_revoke_role( +

Source

pub fn try_revoke_role( &mut self, role: &Role, - address: &Address + address: &Address, ) -> OdraResult<()>

Delegated. See self.access_control.revoke_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

source§

impl EntryPointsCallerProvider for DefaultResolverHostRef

source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
source§

impl HasIdent for DefaultResolverHostRef

source§

fn ident() -> String

Returns the contract’s ident.
source§

impl HostRef for DefaultResolverHostRef

source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

fn env(&self) -> &HostEnv

Returns the host environment.
source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where - T: HostRef,

§

fn address(&self) -> &Address

Returns a reference to the [Address] of the type.
source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Trait Implementations§

Source§

impl EntryPointsCallerProvider for DefaultResolverHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for DefaultResolverHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for DefaultResolverHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where + T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverInitArgs.html b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverInitArgs.html index 0cf740f..22641eb 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverInitArgs.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverInitArgs.html @@ -1,14 +1,27 @@ -DefaultResolverInitArgs in casper_name_contracts::contracts::resolver - Rust
pub struct DefaultResolverInitArgs {
+DefaultResolverInitArgs in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct DefaultResolverInitArgs

Source
pub struct DefaultResolverInitArgs {
     pub name_token: Address,
 }
Expand description

DefaultResolver contract constructor arguments.

-

Fields§

§name_token: Address

Trait Implementations§

source§

impl Into<RuntimeArgs> for DefaultResolverInitArgs

source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
source§

impl InitArgs for DefaultResolverInitArgs

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Fields§

§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for DefaultResolverInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for DefaultResolverInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/struct.NameTokenAddressChanged.html b/docs/casper_name_contracts/contracts/resolver/struct.NameTokenAddressChanged.html new file mode 100644 index 0000000..73e3030 --- /dev/null +++ b/docs/casper_name_contracts/contracts/resolver/struct.NameTokenAddressChanged.html @@ -0,0 +1,32 @@ +NameTokenAddressChanged in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct NameTokenAddressChanged

Source
pub struct NameTokenAddressChanged { /* private fields */ }
Expand description

Event emitted when the name token address is changed.

+

Implementations§

Source§

impl NameTokenAddressChanged

Source

pub fn new(new_name_token: Address) -> Self

Creates a new instance of the NameTokenAddressChanged event.

+

Trait Implementations§

Source§

impl CLTyped for NameTokenAddressChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for NameTokenAddressChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for NameTokenAddressChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for NameTokenAddressChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for NameTokenAddressChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for NameTokenAddressChanged

Source§

fn eq(&self, other: &NameTokenAddressChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for NameTokenAddressChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for NameTokenAddressChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +to_bytes() or into_bytes(). The data is not actually serialized, so this call is +relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for NameTokenAddressChanged

Source§

impl StructuralPartialEq for NameTokenAddressChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoEvent for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/struct.ResolutionChanged.html b/docs/casper_name_contracts/contracts/resolver/struct.ResolutionChanged.html index aeee8e8..773b46e 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.ResolutionChanged.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.ResolutionChanged.html @@ -1,22 +1,32 @@ -ResolutionChanged in casper_name_contracts::contracts::resolver - Rust
pub struct ResolutionChanged { /* private fields */ }
Expand description

Event emitted when a resolution is changed.

-

Implementations§

source§

impl ResolutionChanged

source

pub fn new(full_domain: String, address: Option<Address>) -> Self

Creates a new instance of the ResolutionChanged event.

-

Trait Implementations§

source§

impl CLTyped for ResolutionChanged

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Debug for ResolutionChanged

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl EventInstance for ResolutionChanged

source§

fn name() -> String

Returns the name of the event.
source§

fn schema() -> Schema

Returns the Schema of the event.
source§

impl FromBytes for ResolutionChanged

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl NamedCLTyped for ResolutionChanged

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for ResolutionChanged

source§

fn eq(&self, other: &ResolutionChanged) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl SchemaCustomTypes for ResolutionChanged

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for ResolutionChanged

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +ResolutionChanged in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct ResolutionChanged

Source
pub struct ResolutionChanged { /* private fields */ }
Expand description

Event emitted when a resolution is changed.

+

Implementations§

Source§

impl ResolutionChanged

Source

pub fn new(full_domain: String, address: Option<Address>) -> Self

Creates a new instance of the ResolutionChanged event.

+

Trait Implementations§

Source§

impl CLTyped for ResolutionChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for ResolutionChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for ResolutionChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for ResolutionChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for ResolutionChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for ResolutionChanged

Source§

fn eq(&self, other: &ResolutionChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for ResolutionChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for ResolutionChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for ResolutionChanged

source§

impl StructuralPartialEq for ResolutionChanged

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for ResolutionChanged

Source§

impl StructuralPartialEq for ResolutionChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoEvent for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/struct.ResolutionCleared.html b/docs/casper_name_contracts/contracts/resolver/struct.ResolutionCleared.html index 4093134..7a06989 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.ResolutionCleared.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.ResolutionCleared.html @@ -1,22 +1,32 @@ -ResolutionCleared in casper_name_contracts::contracts::resolver - Rust
pub struct ResolutionCleared { /* private fields */ }
Expand description

Event emitted when a resolution is cleared.

-

Implementations§

source§

impl ResolutionCleared

source

pub fn new(token_hash: String) -> Self

Creates a new instance of the ResolutionCleared event.

-

Trait Implementations§

source§

impl CLTyped for ResolutionCleared

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Debug for ResolutionCleared

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl EventInstance for ResolutionCleared

source§

fn name() -> String

Returns the name of the event.
source§

fn schema() -> Schema

Returns the Schema of the event.
source§

impl FromBytes for ResolutionCleared

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl NamedCLTyped for ResolutionCleared

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for ResolutionCleared

source§

fn eq(&self, other: &ResolutionCleared) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl SchemaCustomTypes for ResolutionCleared

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for ResolutionCleared

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +ResolutionCleared in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct ResolutionCleared

Source
pub struct ResolutionCleared { /* private fields */ }
Expand description

Event emitted when a resolution is cleared.

+

Implementations§

Source§

impl ResolutionCleared

Source

pub fn new(token_id: U256) -> Self

Creates a new instance of the ResolutionCleared event.

+

Trait Implementations§

Source§

impl CLTyped for ResolutionCleared

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for ResolutionCleared

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for ResolutionCleared

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for ResolutionCleared

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for ResolutionCleared

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for ResolutionCleared

Source§

fn eq(&self, other: &ResolutionCleared) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for ResolutionCleared

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for ResolutionCleared

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for ResolutionCleared

source§

impl StructuralPartialEq for ResolutionCleared

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for ResolutionCleared

Source§

impl StructuralPartialEq for ResolutionCleared

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoEvent for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/struct.ResolverContractRef.html b/docs/casper_name_contracts/contracts/resolver/struct.ResolverContractRef.html index 7dabe27..058a434 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.ResolverContractRef.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.ResolverContractRef.html @@ -1,12 +1,25 @@ -ResolverContractRef in casper_name_contracts::contracts::resolver - Rust
pub struct ResolverContractRef { /* private fields */ }
Expand description

[Resolver] Contract Ref.

-

Implementations§

source§

impl ResolverContractRef

source

pub fn init(&mut self, name_token: Address)

source

pub fn set_name_token(&mut self, name_token: Address)

source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

source

pub fn resolve(&self, full_domain: String) -> Option<Address>

source

pub fn cleanup(&mut self, token_hash: String)

Trait Implementations§

source§

impl ContractRef for ResolverContractRef

source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

impl SchemaErrors for ResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for ResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ResolverContractRef in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct ResolverContractRef

Source
pub struct ResolverContractRef { /* private fields */ }
Expand description

[Resolver] Contract Ref.

+

Implementations§

Source§

impl ResolverContractRef

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_name_token(&mut self, name_token: Address)

Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Trait Implementations§

Source§

impl ContractRef for ResolverContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for ResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for ResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/struct.ResolverHostRef.html b/docs/casper_name_contracts/contracts/resolver/struct.ResolverHostRef.html index 5e2247f..fc223a1 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.ResolverHostRef.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.ResolverHostRef.html @@ -1,23 +1,36 @@ -ResolverHostRef in casper_name_contracts::contracts::resolver - Rust
pub struct ResolverHostRef { /* private fields */ }
Expand description

[Resolver] Host Ref.

-

Implementations§

source§

impl ResolverHostRef

source

pub fn init(&mut self, name_token: Address)

source

pub fn set_name_token(&mut self, name_token: Address)

source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

source

pub fn resolve(&self, full_domain: String) -> Option<Address>

source

pub fn cleanup(&mut self, token_hash: String)

source§

impl ResolverHostRef

source

pub fn try_init(&mut self, name_token: Address) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_name_token(&mut self, name_token: Address) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_set_resolution( +ResolverHostRef in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct ResolverHostRef

Source
pub struct ResolverHostRef { /* private fields */ }
Expand description

[Resolver] Host Ref.

+

Implementations§

Source§

impl ResolverHostRef

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_name_token(&mut self, name_token: Address)

Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Source§

impl ResolverHostRef

Source

pub fn try_init(&mut self, name_token: Address) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_set_name_token(&mut self, name_token: Address) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_set_resolution( &mut self, full_domain: String, - address: Option<Address> + address: Option<Address>, ) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_cleanup(&mut self, token_hash: String) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

source§

impl HostRef for ResolverHostRef

source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

fn env(&self) -> &HostEnv

Returns the host environment.
source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where - T: HostRef,

§

fn address(&self) -> &Address

Returns a reference to the [Address] of the type.
source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
Source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_invalidate_resolutions(&mut self, token_id: U256) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+

Trait Implementations§

Source§

impl HostRef for ResolverHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where + T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/__reverse_resolver_test_parts/struct.ReverseResolverInitArgs.html b/docs/casper_name_contracts/contracts/reverse_resolver/__reverse_resolver_test_parts/struct.ReverseResolverInitArgs.html new file mode 100644 index 0000000..8ebb2b5 --- /dev/null +++ b/docs/casper_name_contracts/contracts/reverse_resolver/__reverse_resolver_test_parts/struct.ReverseResolverInitArgs.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../../casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverInitArgs.html...

+ + + \ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/index.html b/docs/casper_name_contracts/contracts/reverse_resolver/index.html index 0e09925..d203c77 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/index.html +++ b/docs/casper_name_contracts/contracts/reverse_resolver/index.html @@ -1 +1 @@ -casper_name_contracts::contracts::reverse_resolver - Rust

Structs§

\ No newline at end of file +casper_name_contracts::contracts::reverse_resolver - Rust
casper_name_contracts::contracts

Module reverse_resolver

Source

Structs§

\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/sidebar-items.js b/docs/casper_name_contracts/contracts/reverse_resolver/sidebar-items.js index b760fc9..9c87bc5 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/sidebar-items.js +++ b/docs/casper_name_contracts/contracts/reverse_resolver/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":["PrimaryNameChanged","ReverseResolver","ReverseResolverContractRef","ReverseResolverHostRef"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":["PrimaryNameChanged","ReverseResolver","ReverseResolverContractRef","ReverseResolverHostRef","ReverseResolverInitArgs"]}; \ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/struct.PrimaryNameChanged.html b/docs/casper_name_contracts/contracts/reverse_resolver/struct.PrimaryNameChanged.html index 97f6a7d..4deacd9 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/struct.PrimaryNameChanged.html +++ b/docs/casper_name_contracts/contracts/reverse_resolver/struct.PrimaryNameChanged.html @@ -1,30 +1,40 @@ -PrimaryNameChanged in casper_name_contracts::contracts::reverse_resolver - Rust
pub struct PrimaryNameChanged {
+PrimaryNameChanged in casper_name_contracts::contracts::reverse_resolver - Rust
casper_name_contracts::contracts::reverse_resolver

Struct PrimaryNameChanged

Source
pub struct PrimaryNameChanged {
     pub address: Address,
     pub old_primary_name: Option<String>,
-    pub new_primary_name: String,
+    pub new_primary_name: Option<String>,
 }
Expand description

Event emitted when the primary name of an address changes.

-

Fields§

§address: Address§old_primary_name: Option<String>§new_primary_name: String

Implementations§

source§

impl PrimaryNameChanged

source

pub fn new( +

Fields§

§address: Address§old_primary_name: Option<String>§new_primary_name: Option<String>

Implementations§

Source§

impl PrimaryNameChanged

Source

pub fn new( address: Address, old_primary_name: Option<String>, - new_primary_name: String + new_primary_name: Option<String>, ) -> Self

Creates a new instance of the PrimaryNameChanged event.

-

Trait Implementations§

source§

impl CLTyped for PrimaryNameChanged

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Debug for PrimaryNameChanged

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl EventInstance for PrimaryNameChanged

source§

fn name() -> String

Returns the name of the event.
source§

fn schema() -> Schema

Returns the Schema of the event.
source§

impl FromBytes for PrimaryNameChanged

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl NamedCLTyped for PrimaryNameChanged

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for PrimaryNameChanged

source§

fn eq(&self, other: &PrimaryNameChanged) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl SchemaCustomTypes for PrimaryNameChanged

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for PrimaryNameChanged

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Trait Implementations§

Source§

impl CLTyped for PrimaryNameChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for PrimaryNameChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for PrimaryNameChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for PrimaryNameChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for PrimaryNameChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PrimaryNameChanged

Source§

fn eq(&self, other: &PrimaryNameChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for PrimaryNameChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PrimaryNameChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for PrimaryNameChanged

source§

impl StructuralPartialEq for PrimaryNameChanged

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PrimaryNameChanged

Source§

impl StructuralPartialEq for PrimaryNameChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoEvent for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolver.html b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolver.html index be28aed..350a370 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolver.html +++ b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolver.html @@ -1,24 +1,48 @@ -ReverseResolver in casper_name_contracts::contracts::reverse_resolver - Rust
pub struct ReverseResolver { /* private fields */ }
Expand description

Reverse Resolver contract. It resolves primary names to addresses.

-

Implementations§

source§

impl ReverseResolver

source

pub fn set_primary_name(&mut self, primary_name: String)

Sets the primary preffered reverse resolution address for the caller.

-
source

pub fn get_primary_name(&self, address: &Address) -> Option<String>

Returns the primary name for the address.

-

Trait Implementations§

source§

impl HasEntrypoints for ReverseResolver

source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
source§

impl HasEvents for ReverseResolver

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl HasIdent for ReverseResolver

source§

fn ident() -> String

Returns the contract’s ident.
source§

impl Module for ReverseResolver

source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
source§

impl OdraContract for ReverseResolver

§

type HostRef = ReverseResolverHostRef

The host reference type.
§

type ContractRef = ReverseResolverContractRef

The contract reference type.
§

type InitArgs = NoArgs

The init args type.
source§

impl SchemaCustomTypes for ReverseResolver

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl SchemaEntrypoints for ReverseResolver

source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
source§

impl SchemaErrors for ReverseResolver

source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for ReverseResolver

source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<R> Deployer<R> for R
where +ReverseResolver in casper_name_contracts::contracts::reverse_resolver - Rust
casper_name_contracts::contracts::reverse_resolver

Struct ReverseResolver

Source
pub struct ReverseResolver { /* private fields */ }
Expand description

Reverse Resolver contract. It resolves primary names to addresses.

+

Implementations§

Source§

impl ReverseResolver

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_primary_name(&mut self, primary_name: String)

Sets the primary preferred reverse resolution address for the caller.

+
Source

pub fn get_primary_name(&self, address: &Address) -> Option<String>

Returns the primary name for the address.

+

Trait Implementations§

Source§

impl HasEntrypoints for ReverseResolver

Source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
Source§

impl HasEvents for ReverseResolver

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl HasIdent for ReverseResolver

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl Module for ReverseResolver

Source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
Source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
Source§

impl OdraContract for ReverseResolver

Source§

type HostRef = ReverseResolverHostRef

The host reference type.
Source§

type ContractRef = ReverseResolverContractRef

The contract reference type.
Source§

type InitArgs = ReverseResolverInitArgs

The init args type.
Source§

impl SchemaCustomTypes for ReverseResolver

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl SchemaEntrypoints for ReverseResolver

Source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
Source§

impl SchemaErrors for ReverseResolver

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for ReverseResolver

Source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
Source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<R> Deployer<R> for R
where R: OdraContract,

§

fn deploy( env: &HostEnv, - init_args: <R as OdraContract>::InitArgs + init_args: <R as OdraContract>::InitArgs, ) -> <R as OdraContract>::HostRef

Deploys a contract with given init args. Read more
§

fn try_deploy( env: &HostEnv, - init_args: <R as OdraContract>::InitArgs -) -> Result<<R as OdraContract>::HostRef, OdraError>

Tries to deploy a contract with given init args. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+ init_args: <R as OdraContract>::InitArgs, +) -> Result<<R as OdraContract>::HostRef, OdraError>

Tries to deploy a contract with given init args. Read more
§

fn deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> <R as OdraContract>::HostRef
where + T: OdraConfig,

Deploys a contract with given init args and configuration. Read more
§

fn try_deploy_with_cfg<T>( + env: &HostEnv, + init_args: <R as OdraContract>::InitArgs, + cfg: T, +) -> Result<<R as OdraContract>::HostRef, OdraError>
where + T: OdraConfig,

Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where - T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ T: OdraContract,
§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
§

impl<T> Revertible for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where - E: Into<OdraError>,

Reverts the contract execution with the given error.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + E: Into<OdraError>,
Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverContractRef.html b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverContractRef.html index 37ff2c2..c118e8b 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverContractRef.html +++ b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverContractRef.html @@ -1,14 +1,27 @@ -ReverseResolverContractRef in casper_name_contracts::contracts::reverse_resolver - Rust
pub struct ReverseResolverContractRef { /* private fields */ }
Expand description

ReverseResolver Contract Ref.

-

Implementations§

source§

impl ReverseResolverContractRef

source

pub fn set_primary_name(&mut self, primary_name: String)

Sets the primary preffered reverse resolution address for the caller.

-
source

pub fn get_primary_name(&self, address: &Address) -> Option<String>

Returns the primary name for the address.

-

Trait Implementations§

source§

impl ContractRef for ReverseResolverContractRef

source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

impl SchemaErrors for ReverseResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
source§

impl SchemaEvents for ReverseResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ReverseResolverContractRef in casper_name_contracts::contracts::reverse_resolver - Rust
casper_name_contracts::contracts::reverse_resolver

Struct ReverseResolverContractRef

Source
pub struct ReverseResolverContractRef { /* private fields */ }
Expand description

ReverseResolver Contract Ref.

+

Implementations§

Source§

impl ReverseResolverContractRef

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_primary_name(&mut self, primary_name: String)

Sets the primary preferred reverse resolution address for the caller.

+
Source

pub fn get_primary_name(&self, address: &Address) -> Option<String>

Returns the primary name for the address.

+

Trait Implementations§

Source§

impl ContractRef for ReverseResolverContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for ReverseResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for ReverseResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverHostRef.html b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverHostRef.html index ca18dfa..d7bf6e6 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverHostRef.html +++ b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverHostRef.html @@ -1,23 +1,37 @@ -ReverseResolverHostRef in casper_name_contracts::contracts::reverse_resolver - Rust
pub struct ReverseResolverHostRef { /* private fields */ }
Expand description

ReverseResolver Host Ref.

-

Implementations§

source§

impl ReverseResolverHostRef

source

pub fn set_primary_name(&mut self, primary_name: String)

Sets the primary preffered reverse resolution address for the caller.

-
source

pub fn get_primary_name(&self, address: &Address) -> Option<String>

Returns the primary name for the address.

-
source§

impl ReverseResolverHostRef

source

pub fn try_set_primary_name(&mut self, primary_name: String) -> OdraResult<()>

Sets the primary preffered reverse resolution address for the caller. +ReverseResolverHostRef in casper_name_contracts::contracts::reverse_resolver - Rust

casper_name_contracts::contracts::reverse_resolver

Struct ReverseResolverHostRef

Source
pub struct ReverseResolverHostRef { /* private fields */ }
Expand description

ReverseResolver Host Ref.

+

Implementations§

Source§

impl ReverseResolverHostRef

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_primary_name(&mut self, primary_name: String)

Sets the primary preferred reverse resolution address for the caller.

+
Source

pub fn get_primary_name(&self, address: &Address) -> Option<String>

Returns the primary name for the address.

+
Source§

impl ReverseResolverHostRef

Source

pub fn try_init(&mut self, name_token: Address) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_set_primary_name(&mut self, primary_name: String) -> OdraResult<()>

Sets the primary preferred reverse resolution address for the caller. Does not fail in case of error, returns odra::OdraResult instead.

-
source

pub fn try_get_primary_name( +

Source

pub fn try_get_primary_name( &self, - address: &Address + address: &Address, ) -> OdraResult<Option<String>>

Returns the primary name for the address. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

source§

impl EntryPointsCallerProvider for ReverseResolverHostRef

source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
source§

impl HasIdent for ReverseResolverHostRef

source§

fn ident() -> String

Returns the contract’s ident.
source§

impl HostRef for ReverseResolverHostRef

source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
source§

fn address(&self) -> &Address

Returns the address of the contract.
source§

fn env(&self) -> &HostEnv

Returns the host environment.
source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where - T: HostRef,

§

fn address(&self) -> &Address

Returns a reference to the [Address] of the type.
source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Trait Implementations§

Source§

impl EntryPointsCallerProvider for ReverseResolverHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for ReverseResolverHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for ReverseResolverHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where + T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverInitArgs.html b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverInitArgs.html new file mode 100644 index 0000000..8b931da --- /dev/null +++ b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverInitArgs.html @@ -0,0 +1,27 @@ +ReverseResolverInitArgs in casper_name_contracts::contracts::reverse_resolver - Rust
casper_name_contracts::contracts::reverse_resolver

Struct ReverseResolverInitArgs

Source
pub struct ReverseResolverInitArgs {
+    pub name_token: Address,
+}
Expand description

ReverseResolver contract constructor arguments.

+

Fields§

§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for ReverseResolverInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for ReverseResolverInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/sidebar-items.js b/docs/casper_name_contracts/contracts/sidebar-items.js index 1a6a0e3..230c5cf 100644 --- a/docs/casper_name_contracts/contracts/sidebar-items.js +++ b/docs/casper_name_contracts/contracts/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"mod":["controller","marketplace","name_token","registrar","resolver","reverse_resolver"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"mod":["controller","marketplace","name_token","registrar","resolver","reverse_resolver","token_id"]}; \ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/token_id/index.html b/docs/casper_name_contracts/contracts/token_id/index.html new file mode 100644 index 0000000..6d96fcb --- /dev/null +++ b/docs/casper_name_contracts/contracts/token_id/index.html @@ -0,0 +1 @@ +casper_name_contracts::contracts::token_id - Rust
casper_name_contracts::contracts

Module token_id

Source

Traits§

\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/token_id/sidebar-items.js b/docs/casper_name_contracts/contracts/token_id/sidebar-items.js new file mode 100644 index 0000000..017eaaa --- /dev/null +++ b/docs/casper_name_contracts/contracts/token_id/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["ToTokenId"]}; \ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/token_id/trait.ToTokenId.html b/docs/casper_name_contracts/contracts/token_id/trait.ToTokenId.html new file mode 100644 index 0000000..e851e5b --- /dev/null +++ b/docs/casper_name_contracts/contracts/token_id/trait.ToTokenId.html @@ -0,0 +1,6 @@ +ToTokenId in casper_name_contracts::contracts::token_id - Rust
casper_name_contracts::contracts::token_id

Trait ToTokenId

Source
pub trait ToTokenId {
+    // Required method
+    fn token_id(&self, label: String) -> U256;
+}

Required Methods§

Source

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.

+

Implementors§

Source§

impl<T> ToTokenId for T
where + T: Module,

\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/enum.NameTokenError.html b/docs/casper_name_contracts/data_structures/enum.NameTokenError.html index 9cc783c..5d086d1 100644 --- a/docs/casper_name_contracts/data_structures/enum.NameTokenError.html +++ b/docs/casper_name_contracts/data_structures/enum.NameTokenError.html @@ -1,4 +1,4 @@ -NameTokenError in casper_name_contracts::data_structures - Rust
pub enum NameTokenError {
+NameTokenError in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Enum NameTokenError

Source
pub enum NameTokenError {
     EmptyTLD = 1_001,
     TLDNotSupported = 1_002,
     PastExpirationDate = 1_003,
@@ -6,15 +6,29 @@
     SLDDoesNotExist = 1_005,
     SerializationError = 1_006,
     DeserializationError = 1_007,
+    InvalidMetadata = 1_008,
 }
Expand description

Errors that can occur while working with name tokens.

-

Variants§

§

EmptyTLD = 1_001

§

TLDNotSupported = 1_002

§

PastExpirationDate = 1_003

§

EmptyLabel = 1_004

§

SLDDoesNotExist = 1_005

§

SerializationError = 1_006

§

DeserializationError = 1_007

Trait Implementations§

source§

impl Debug for NameTokenError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<NameTokenError> for OdraError

source§

fn from(error: NameTokenError) -> Self

Converts to this type from the input type.
source§

impl SchemaErrors for NameTokenError

source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Variants§

§

EmptyTLD = 1_001

§

TLDNotSupported = 1_002

§

PastExpirationDate = 1_003

§

EmptyLabel = 1_004

§

SLDDoesNotExist = 1_005

§

SerializationError = 1_006

§

DeserializationError = 1_007

§

InvalidMetadata = 1_008

Trait Implementations§

Source§

impl Debug for NameTokenError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<NameTokenError> for OdraError

Source§

fn from(error: NameTokenError) -> Self

Converts to this type from the input type.
Source§

impl SchemaErrors for NameTokenError

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/index.html b/docs/casper_name_contracts/data_structures/index.html index 7dac150..1055907 100644 --- a/docs/casper_name_contracts/data_structures/index.html +++ b/docs/casper_name_contracts/data_structures/index.html @@ -1 +1 @@ -casper_name_contracts::data_structures - Rust

Module casper_name_contracts::data_structures

source ·

Structs§

Enums§

Traits§

\ No newline at end of file +casper_name_contracts::data_structures - Rust
casper_name_contracts

Module data_structures

Source

Structs§

Enums§

Traits§

\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/struct.NameMintInfo.html b/docs/casper_name_contracts/data_structures/struct.NameMintInfo.html index 949eba5..02edd7d 100644 --- a/docs/casper_name_contracts/data_structures/struct.NameMintInfo.html +++ b/docs/casper_name_contracts/data_structures/struct.NameMintInfo.html @@ -1,28 +1,45 @@ -NameMintInfo in casper_name_contracts::data_structures - Rust
pub struct NameMintInfo {
+NameMintInfo in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct NameMintInfo

Source
pub struct NameMintInfo {
     pub label: String,
     pub owner: Address,
     pub token_expiration: u64,
+    pub asset_uri: String,
 }
Expand description

Basic minting information for a name token.

-

Fields§

§label: String§owner: Address§token_expiration: u64

Implementations§

source§

impl NameMintInfo

source

pub fn new(label: &str, owner: Address, token_expiration: u64) -> Self

Trait Implementations§

source§

impl CLTyped for NameMintInfo

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Clone for NameMintInfo

source§

fn clone(&self) -> NameMintInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for NameMintInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromBytes for NameMintInfo

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl HasEvents for NameMintInfo

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl NamedCLTyped for NameMintInfo

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for NameMintInfo

source§

fn eq(&self, other: &NameMintInfo) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl SchemaCustomTypes for NameMintInfo

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for NameMintInfo

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§label: String§owner: Address§token_expiration: u64§asset_uri: String

Implementations§

Source§

impl NameMintInfo

Source

pub fn new( + label: &str, + owner: Address, + token_expiration: u64, + asset_uri: &str, +) -> Self

Trait Implementations§

Source§

impl CLTyped for NameMintInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for NameMintInfo

Source§

fn clone(&self) -> NameMintInfo

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NameMintInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for NameMintInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for NameMintInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for NameMintInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for NameMintInfo

Source§

fn eq(&self, other: &NameMintInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for NameMintInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for NameMintInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for NameMintInfo

source§

impl SchemaCustomElement for NameMintInfo

source§

impl StructuralPartialEq for NameMintInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for T
where - T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for NameMintInfo

Source§

impl SchemaCustomElement for NameMintInfo

Source§

impl StructuralPartialEq for NameMintInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where - T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + T: SchemaCustomElement,
§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/struct.NameTokenMetadata.html b/docs/casper_name_contracts/data_structures/struct.NameTokenMetadata.html index 2b1012a..3761ea3 100644 --- a/docs/casper_name_contracts/data_structures/struct.NameTokenMetadata.html +++ b/docs/casper_name_contracts/data_structures/struct.NameTokenMetadata.html @@ -1,19 +1,37 @@ -NameTokenMetadata in casper_name_contracts::data_structures - Rust
pub struct NameTokenMetadata { /* private fields */ }
Expand description

Metadata associated with a name token.

-

Implementations§

source§

impl NameTokenMetadata

source

pub fn with_resolver(name: &str, expiration: u64, resolver: Address) -> Self

source

pub fn with_no_resolver(name: &str, expiration: u64) -> Self

source

pub fn set_resolver(&mut self, resolver: Address)

source

pub fn resolver(&self) -> OdraResult<Option<Address>>

source

pub fn clear_resolver(&mut self)

source

pub fn json(&self) -> String

source

pub fn expiration(&self) -> OdraResult<u64>

source

pub fn set_expiration(&mut self, expiration: u64)

Trait Implementations§

source§

impl Clone for NameTokenMetadata

source§

fn clone(&self) -> NameTokenMetadata

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for NameTokenMetadata

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for NameTokenMetadata

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl PartialEq for NameTokenMetadata

source§

fn eq(&self, other: &NameTokenMetadata) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for NameTokenMetadata

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TryFrom<String> for NameTokenMetadata

§

type Error = NameTokenError

The type returned in the event of a conversion error.
source§

fn try_from(value: String) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl StructuralPartialEq for NameTokenMetadata

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for T
where - T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+NameTokenMetadata in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct NameTokenMetadata

Source
pub struct NameTokenMetadata { /* private fields */ }
Expand description

Metadata associated with a name token.

+

Implementations§

Source§

impl NameTokenMetadata

Source

pub fn with_resolver( + name: &str, + expiration: u64, + asset_uri: &str, + resolver: Address, +) -> Self

Source

pub fn with_no_resolver(name: &str, expiration: u64, asset_uri: &str) -> Self

Source

pub fn set_resolver(&mut self, resolver: Address)

Source

pub fn resolver(&self) -> OdraResult<Option<Address>>

Source

pub fn clear_resolver(&mut self)

Source

pub fn json(&self) -> String

Source

pub fn to_vec(&self) -> Vec<(String, String)>

Source

pub fn expiration(&self) -> u64

Source

pub fn set_expiration(&mut self, expiration: u64)

Trait Implementations§

Source§

impl Clone for NameTokenMetadata

Source§

fn clone(&self) -> NameTokenMetadata

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NameTokenMetadata

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for NameTokenMetadata

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for NameTokenMetadata

Source§

fn eq(&self, other: &NameTokenMetadata) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Serialize for NameTokenMetadata

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl TryFrom<String> for NameTokenMetadata

Source§

type Error = NameTokenError

The type returned in the event of a conversion error.
Source§

fn try_from(value: String) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl TryFrom<Vec<(String, String)>> for NameTokenMetadata

Source§

type Error = NameTokenError

The type returned in the event of a conversion error.
Source§

fn try_from(value: Vec<(String, String)>) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl StructuralPartialEq for NameTokenMetadata

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file +
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/struct.NameTransferInfo.html b/docs/casper_name_contracts/data_structures/struct.NameTransferInfo.html index 111ceeb..0dfc1d6 100644 --- a/docs/casper_name_contracts/data_structures/struct.NameTransferInfo.html +++ b/docs/casper_name_contracts/data_structures/struct.NameTransferInfo.html @@ -1,27 +1,38 @@ -NameTransferInfo in casper_name_contracts::data_structures - Rust
pub struct NameTransferInfo {
+NameTransferInfo in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct NameTransferInfo

Source
pub struct NameTransferInfo {
     pub label: String,
     pub owner: Address,
 }
Expand description

Pair of a label and owner address.

-

Fields§

§label: String§owner: Address

Trait Implementations§

source§

impl CLTyped for NameTransferInfo

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Clone for NameTransferInfo

source§

fn clone(&self) -> NameTransferInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for NameTransferInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromBytes for NameTransferInfo

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl HasEvents for NameTransferInfo

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl NamedCLTyped for NameTransferInfo

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for NameTransferInfo

source§

fn eq(&self, other: &NameTransferInfo) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl SchemaCustomTypes for NameTransferInfo

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for NameTransferInfo

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§label: String§owner: Address

Trait Implementations§

Source§

impl CLTyped for NameTransferInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for NameTransferInfo

Source§

fn clone(&self) -> NameTransferInfo

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NameTransferInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for NameTransferInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for NameTransferInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for NameTransferInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for NameTransferInfo

Source§

fn eq(&self, other: &NameTransferInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for NameTransferInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for NameTransferInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for NameTransferInfo

source§

impl SchemaCustomElement for NameTransferInfo

source§

impl StructuralPartialEq for NameTransferInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for T
where - T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for NameTransferInfo

Source§

impl SchemaCustomElement for NameTransferInfo

Source§

impl StructuralPartialEq for NameTransferInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where - T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + T: SchemaCustomElement,
§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/struct.PaymentInfo.html b/docs/casper_name_contracts/data_structures/struct.PaymentInfo.html index 4d82c43..6ac55f4 100644 --- a/docs/casper_name_contracts/data_structures/struct.PaymentInfo.html +++ b/docs/casper_name_contracts/data_structures/struct.PaymentInfo.html @@ -1,28 +1,39 @@ -PaymentInfo in casper_name_contracts::data_structures - Rust
pub struct PaymentInfo {
+PaymentInfo in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct PaymentInfo

Source
pub struct PaymentInfo {
     pub buyer: Address,
     pub payment_id: String,
-    pub amount: U512,
+    pub amount: U512,
 }
Expand description

Information about a payment.

-

Fields§

§buyer: Address§payment_id: String§amount: U512

Trait Implementations§

source§

impl CLTyped for PaymentInfo

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Clone for PaymentInfo

source§

fn clone(&self) -> PaymentInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PaymentInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromBytes for PaymentInfo

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl HasEvents for PaymentInfo

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl NamedCLTyped for PaymentInfo

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for PaymentInfo

source§

fn eq(&self, other: &PaymentInfo) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl SchemaCustomTypes for PaymentInfo

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for PaymentInfo

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§buyer: Address§payment_id: String§amount: U512

Trait Implementations§

Source§

impl CLTyped for PaymentInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for PaymentInfo

Source§

fn clone(&self) -> PaymentInfo

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PaymentInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for PaymentInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for PaymentInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for PaymentInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PaymentInfo

Source§

fn eq(&self, other: &PaymentInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for PaymentInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PaymentInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for PaymentInfo

source§

impl SchemaCustomElement for PaymentInfo

source§

impl StructuralPartialEq for PaymentInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for T
where - T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PaymentInfo

Source§

impl SchemaCustomElement for PaymentInfo

Source§

impl StructuralPartialEq for PaymentInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where - T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + T: SchemaCustomElement,
§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/struct.PaymentVoucher.html b/docs/casper_name_contracts/data_structures/struct.PaymentVoucher.html index 9cee0ee..14f7770 100644 --- a/docs/casper_name_contracts/data_structures/struct.PaymentVoucher.html +++ b/docs/casper_name_contracts/data_structures/struct.PaymentVoucher.html @@ -1,34 +1,45 @@ -PaymentVoucher in casper_name_contracts::data_structures - Rust
pub struct PaymentVoucher {
+PaymentVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct PaymentVoucher

Source
pub struct PaymentVoucher {
     pub payment: PaymentInfo,
     pub names: Vec<NameMintInfo>,
     pub voucher_expiration: u64,
 }
Expand description

Information about a payment and a list of NameMintInfo structs.

-

Fields§

§payment: PaymentInfo§names: Vec<NameMintInfo>§voucher_expiration: u64

Implementations§

source§

impl PaymentVoucher

source

pub fn new( - amount: U512, +

Fields§

§payment: PaymentInfo§names: Vec<NameMintInfo>§voucher_expiration: u64

Implementations§

Source§

impl PaymentVoucher

Source

pub fn new( + amount: U512, payment_id: &str, buyer: Address, names: Vec<NameMintInfo>, - voucher_expiration: u64 -) -> Self

Trait Implementations§

source§

impl CLTyped for PaymentVoucher

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Clone for PaymentVoucher

source§

fn clone(&self) -> PaymentVoucher

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PaymentVoucher

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<PaymentVoucher> for TokenizationVoucher

source§

fn from(voucher: PaymentVoucher) -> Self

Converts to this type from the input type.
source§

impl FromBytes for PaymentVoucher

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl HasEvents for PaymentVoucher

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl NamedCLTyped for PaymentVoucher

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for PaymentVoucher

source§

fn eq(&self, other: &PaymentVoucher) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Payment for PaymentVoucher

source§

impl SchemaCustomTypes for PaymentVoucher

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for PaymentVoucher

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to + voucher_expiration: u64, +) -> Self

Trait Implementations§

Source§

impl CLTyped for PaymentVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for PaymentVoucher

Source§

fn clone(&self) -> PaymentVoucher

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PaymentVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<PaymentVoucher> for TokenizationVoucher

Source§

fn from(voucher: PaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for PaymentVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for PaymentVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for PaymentVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PaymentVoucher

Source§

fn eq(&self, other: &PaymentVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Payment for PaymentVoucher

Source§

impl SchemaCustomTypes for PaymentVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PaymentVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for PaymentVoucher

source§

impl SchemaCustomElement for PaymentVoucher

source§

impl StructuralPartialEq for PaymentVoucher

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for T
where - T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PaymentVoucher

Source§

impl SchemaCustomElement for PaymentVoucher

Source§

impl StructuralPartialEq for PaymentVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where - T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + T: SchemaCustomElement,
§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/struct.RenewalPaymentVoucher.html b/docs/casper_name_contracts/data_structures/struct.RenewalPaymentVoucher.html index 76a4d2e..c047156 100644 --- a/docs/casper_name_contracts/data_structures/struct.RenewalPaymentVoucher.html +++ b/docs/casper_name_contracts/data_structures/struct.RenewalPaymentVoucher.html @@ -1,34 +1,45 @@ -RenewalPaymentVoucher in casper_name_contracts::data_structures - Rust
pub struct RenewalPaymentVoucher {
+RenewalPaymentVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct RenewalPaymentVoucher

Source
pub struct RenewalPaymentVoucher {
     pub payment: PaymentInfo,
     pub tokens: Vec<TokenRenewalInfo>,
     pub voucher_expiration: u64,
 }
Expand description

Voucher for renewing multiple name tokens, plus payment information.

-

Fields§

§payment: PaymentInfo§tokens: Vec<TokenRenewalInfo>§voucher_expiration: u64

Implementations§

source§

impl RenewalPaymentVoucher

source

pub fn new( - amount: U512, +

Fields§

§payment: PaymentInfo§tokens: Vec<TokenRenewalInfo>§voucher_expiration: u64

Implementations§

Source§

impl RenewalPaymentVoucher

Source

pub fn new( + amount: U512, payment_id: &str, buyer: Address, tokens: Vec<TokenRenewalInfo>, - voucher_expiration: u64 -) -> Self

Trait Implementations§

source§

impl CLTyped for RenewalPaymentVoucher

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Clone for RenewalPaymentVoucher

source§

fn clone(&self) -> RenewalPaymentVoucher

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RenewalPaymentVoucher

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<RenewalPaymentVoucher> for RenewalVoucher

source§

fn from(voucher: RenewalPaymentVoucher) -> Self

Converts to this type from the input type.
source§

impl FromBytes for RenewalPaymentVoucher

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl HasEvents for RenewalPaymentVoucher

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl NamedCLTyped for RenewalPaymentVoucher

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for RenewalPaymentVoucher

source§

fn eq(&self, other: &RenewalPaymentVoucher) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Payment for RenewalPaymentVoucher

source§

impl SchemaCustomTypes for RenewalPaymentVoucher

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for RenewalPaymentVoucher

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to + voucher_expiration: u64, +) -> Self

Trait Implementations§

Source§

impl CLTyped for RenewalPaymentVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for RenewalPaymentVoucher

Source§

fn clone(&self) -> RenewalPaymentVoucher

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RenewalPaymentVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<RenewalPaymentVoucher> for RenewalVoucher

Source§

fn from(voucher: RenewalPaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for RenewalPaymentVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for RenewalPaymentVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for RenewalPaymentVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for RenewalPaymentVoucher

Source§

fn eq(&self, other: &RenewalPaymentVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Payment for RenewalPaymentVoucher

Source§

impl SchemaCustomTypes for RenewalPaymentVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for RenewalPaymentVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for RenewalPaymentVoucher

source§

impl SchemaCustomElement for RenewalPaymentVoucher

source§

impl StructuralPartialEq for RenewalPaymentVoucher

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for T
where - T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for RenewalPaymentVoucher

Source§

impl SchemaCustomElement for RenewalPaymentVoucher

Source§

impl StructuralPartialEq for RenewalPaymentVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where - T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + T: SchemaCustomElement,
§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/struct.RenewalVoucher.html b/docs/casper_name_contracts/data_structures/struct.RenewalVoucher.html index f0e8bb7..38f6486 100644 --- a/docs/casper_name_contracts/data_structures/struct.RenewalVoucher.html +++ b/docs/casper_name_contracts/data_structures/struct.RenewalVoucher.html @@ -1,27 +1,38 @@ -RenewalVoucher in casper_name_contracts::data_structures - Rust
pub struct RenewalVoucher {
+RenewalVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct RenewalVoucher

Source
pub struct RenewalVoucher {
     pub tokens: Vec<TokenRenewalInfo>,
     pub voucher_expiration: u64,
 }
Expand description

Voucher for renewing multiple name tokens.

-

Fields§

§tokens: Vec<TokenRenewalInfo>§voucher_expiration: u64

Implementations§

source§

impl RenewalVoucher

source

pub fn new(tokens: Vec<TokenRenewalInfo>, voucher_expiration: u64) -> Self

Trait Implementations§

source§

impl CLTyped for RenewalVoucher

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Clone for RenewalVoucher

source§

fn clone(&self) -> RenewalVoucher

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RenewalVoucher

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl ExpirableVoucher for RenewalVoucher

source§

impl From<RenewalPaymentVoucher> for RenewalVoucher

source§

fn from(voucher: RenewalPaymentVoucher) -> Self

Converts to this type from the input type.
source§

impl FromBytes for RenewalVoucher

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl HasEvents for RenewalVoucher

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl NamedCLTyped for RenewalVoucher

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for RenewalVoucher

source§

fn eq(&self, other: &RenewalVoucher) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl SchemaCustomTypes for RenewalVoucher

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for RenewalVoucher

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§tokens: Vec<TokenRenewalInfo>§voucher_expiration: u64

Implementations§

Source§

impl RenewalVoucher

Source

pub fn new(tokens: Vec<TokenRenewalInfo>, voucher_expiration: u64) -> Self

Trait Implementations§

Source§

impl CLTyped for RenewalVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for RenewalVoucher

Source§

fn clone(&self) -> RenewalVoucher

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RenewalVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl ExpirableVoucher for RenewalVoucher

Source§

impl From<RenewalPaymentVoucher> for RenewalVoucher

Source§

fn from(voucher: RenewalPaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for RenewalVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for RenewalVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for RenewalVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for RenewalVoucher

Source§

fn eq(&self, other: &RenewalVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for RenewalVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for RenewalVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for RenewalVoucher

source§

impl SchemaCustomElement for RenewalVoucher

source§

impl StructuralPartialEq for RenewalVoucher

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for T
where - T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for RenewalVoucher

Source§

impl SchemaCustomElement for RenewalVoucher

Source§

impl StructuralPartialEq for RenewalVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where - T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + T: SchemaCustomElement,
§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/struct.SecondarySaleVoucher.html b/docs/casper_name_contracts/data_structures/struct.SecondarySaleVoucher.html index e710089..9ca8e52 100644 --- a/docs/casper_name_contracts/data_structures/struct.SecondarySaleVoucher.html +++ b/docs/casper_name_contracts/data_structures/struct.SecondarySaleVoucher.html @@ -1,28 +1,39 @@ -SecondarySaleVoucher in casper_name_contracts::data_structures - Rust
pub struct SecondarySaleVoucher {
+SecondarySaleVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct SecondarySaleVoucher

Source
pub struct SecondarySaleVoucher {
     pub payment: PaymentInfo,
     pub names: Vec<NameTransferInfo>,
     pub voucher_expiration: u64,
 }
Expand description

Information about a payment and a list of NameTransferInfo structs.

-

Fields§

§payment: PaymentInfo§names: Vec<NameTransferInfo>§voucher_expiration: u64

Trait Implementations§

source§

impl CLTyped for SecondarySaleVoucher

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Clone for SecondarySaleVoucher

source§

fn clone(&self) -> SecondarySaleVoucher

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SecondarySaleVoucher

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromBytes for SecondarySaleVoucher

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl HasEvents for SecondarySaleVoucher

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl NamedCLTyped for SecondarySaleVoucher

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for SecondarySaleVoucher

source§

fn eq(&self, other: &SecondarySaleVoucher) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Payment for SecondarySaleVoucher

source§

impl SchemaCustomTypes for SecondarySaleVoucher

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for SecondarySaleVoucher

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§payment: PaymentInfo§names: Vec<NameTransferInfo>§voucher_expiration: u64

Trait Implementations§

Source§

impl CLTyped for SecondarySaleVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for SecondarySaleVoucher

Source§

fn clone(&self) -> SecondarySaleVoucher

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SecondarySaleVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for SecondarySaleVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for SecondarySaleVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for SecondarySaleVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for SecondarySaleVoucher

Source§

fn eq(&self, other: &SecondarySaleVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Payment for SecondarySaleVoucher

Source§

impl SchemaCustomTypes for SecondarySaleVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for SecondarySaleVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for SecondarySaleVoucher

source§

impl SchemaCustomElement for SecondarySaleVoucher

source§

impl StructuralPartialEq for SecondarySaleVoucher

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for T
where - T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for SecondarySaleVoucher

Source§

impl SchemaCustomElement for SecondarySaleVoucher

Source§

impl StructuralPartialEq for SecondarySaleVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where - T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + T: SchemaCustomElement,
§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/struct.TokenRenewalInfo.html b/docs/casper_name_contracts/data_structures/struct.TokenRenewalInfo.html index d5599ce..d835baf 100644 --- a/docs/casper_name_contracts/data_structures/struct.TokenRenewalInfo.html +++ b/docs/casper_name_contracts/data_structures/struct.TokenRenewalInfo.html @@ -1,27 +1,38 @@ -TokenRenewalInfo in casper_name_contracts::data_structures - Rust
pub struct TokenRenewalInfo {
-    pub token_id: String,
+TokenRenewalInfo in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct TokenRenewalInfo

Source
pub struct TokenRenewalInfo {
+    pub token_id: U256,
     pub token_expiration: u64,
 }
Expand description

Renewal information with new expiration time.

-

Fields§

§token_id: String§token_expiration: u64

Implementations§

source§

impl TokenRenewalInfo

source

pub fn new(token_id: String, token_expiration: u64) -> Self

Trait Implementations§

source§

impl CLTyped for TokenRenewalInfo

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Clone for TokenRenewalInfo

source§

fn clone(&self) -> TokenRenewalInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TokenRenewalInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromBytes for TokenRenewalInfo

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl HasEvents for TokenRenewalInfo

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl NamedCLTyped for TokenRenewalInfo

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for TokenRenewalInfo

source§

fn eq(&self, other: &TokenRenewalInfo) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl SchemaCustomTypes for TokenRenewalInfo

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for TokenRenewalInfo

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§token_id: U256§token_expiration: u64

Implementations§

Source§

impl TokenRenewalInfo

Source

pub fn new(token_id: U256, token_expiration: u64) -> Self

Trait Implementations§

Source§

impl CLTyped for TokenRenewalInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for TokenRenewalInfo

Source§

fn clone(&self) -> TokenRenewalInfo

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TokenRenewalInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for TokenRenewalInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for TokenRenewalInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for TokenRenewalInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for TokenRenewalInfo

Source§

fn eq(&self, other: &TokenRenewalInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for TokenRenewalInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for TokenRenewalInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for TokenRenewalInfo

source§

impl SchemaCustomElement for TokenRenewalInfo

source§

impl StructuralPartialEq for TokenRenewalInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for T
where - T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for TokenRenewalInfo

Source§

impl SchemaCustomElement for TokenRenewalInfo

Source§

impl StructuralPartialEq for TokenRenewalInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where - T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + T: SchemaCustomElement,
§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/struct.TokenizationVoucher.html b/docs/casper_name_contracts/data_structures/struct.TokenizationVoucher.html index 06f3236..9412158 100644 --- a/docs/casper_name_contracts/data_structures/struct.TokenizationVoucher.html +++ b/docs/casper_name_contracts/data_structures/struct.TokenizationVoucher.html @@ -1,27 +1,38 @@ -TokenizationVoucher in casper_name_contracts::data_structures - Rust
pub struct TokenizationVoucher {
+TokenizationVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct TokenizationVoucher

Source
pub struct TokenizationVoucher {
     pub names: Vec<NameMintInfo>,
     pub voucher_expiration: u64,
 }
Expand description

List of NameMintInfo structs and the expiration time of the voucher.

-

Fields§

§names: Vec<NameMintInfo>§voucher_expiration: u64

Implementations§

source§

impl TokenizationVoucher

source

pub fn new(names: Vec<NameMintInfo>, voucher_expiration: u64) -> Self

Trait Implementations§

source§

impl CLTyped for TokenizationVoucher

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Clone for TokenizationVoucher

source§

fn clone(&self) -> TokenizationVoucher

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TokenizationVoucher

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl ExpirableVoucher for TokenizationVoucher

source§

impl From<PaymentVoucher> for TokenizationVoucher

source§

fn from(voucher: PaymentVoucher) -> Self

Converts to this type from the input type.
source§

impl FromBytes for TokenizationVoucher

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl HasEvents for TokenizationVoucher

source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
source§

impl NamedCLTyped for TokenizationVoucher

source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
source§

impl PartialEq for TokenizationVoucher

source§

fn eq(&self, other: &TokenizationVoucher) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl SchemaCustomTypes for TokenizationVoucher

source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
source§

impl ToBytes for TokenizationVoucher

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§names: Vec<NameMintInfo>§voucher_expiration: u64

Implementations§

Source§

impl TokenizationVoucher

Source

pub fn new(names: Vec<NameMintInfo>, voucher_expiration: u64) -> Self

Trait Implementations§

Source§

impl CLTyped for TokenizationVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for TokenizationVoucher

Source§

fn clone(&self) -> TokenizationVoucher

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TokenizationVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl ExpirableVoucher for TokenizationVoucher

Source§

impl From<PaymentVoucher> for TokenizationVoucher

Source§

fn from(voucher: PaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for TokenizationVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for TokenizationVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for TokenizationVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for TokenizationVoucher

Source§

fn eq(&self, other: &TokenizationVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for TokenizationVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for TokenizationVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

impl Eq for TokenizationVoucher

source§

impl SchemaCustomElement for TokenizationVoucher

source§

impl StructuralPartialEq for TokenizationVoucher

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for T
where - T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
source§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for TokenizationVoucher

Source§

impl SchemaCustomElement for TokenizationVoucher

Source§

impl StructuralPartialEq for TokenizationVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where + T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

-
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where +

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where - T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + T: SchemaCustomElement,
§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/trait.ExpirableVoucher.html b/docs/casper_name_contracts/data_structures/trait.ExpirableVoucher.html index d4bb842..694c0e8 100644 --- a/docs/casper_name_contracts/data_structures/trait.ExpirableVoucher.html +++ b/docs/casper_name_contracts/data_structures/trait.ExpirableVoucher.html @@ -1,4 +1,4 @@ -ExpirableVoucher in casper_name_contracts::data_structures - Rust
pub trait ExpirableVoucher {
+ExpirableVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Trait ExpirableVoucher

Source
pub trait ExpirableVoucher {
     // Required method
     fn expiration_time(&self) -> u64;
-}

Required Methods§

Implementors§

\ No newline at end of file +}

Required Methods§

Implementors§

\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/trait.Payment.html b/docs/casper_name_contracts/data_structures/trait.Payment.html index 5532f44..a7b9bec 100644 --- a/docs/casper_name_contracts/data_structures/trait.Payment.html +++ b/docs/casper_name_contracts/data_structures/trait.Payment.html @@ -1,4 +1,4 @@ -Payment in casper_name_contracts::data_structures - Rust

Trait casper_name_contracts::data_structures::Payment

source ·
pub trait Payment {
+Payment in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Trait Payment

Source
pub trait Payment {
     // Required method
     fn payment_info(&self) -> &PaymentInfo;
-}

Required Methods§

Implementors§

\ No newline at end of file +}

Required Methods§

Implementors§

\ No newline at end of file diff --git a/docs/casper_name_contracts/index.html b/docs/casper_name_contracts/index.html index 689ecbb..484029f 100644 --- a/docs/casper_name_contracts/index.html +++ b/docs/casper_name_contracts/index.html @@ -1 +1 @@ -casper_name_contracts - Rust
\ No newline at end of file +casper_name_contracts - Rust

Crate casper_name_contracts

Source

Modules§

\ No newline at end of file diff --git a/docs/crates.js b/docs/crates.js index 1b871cc..5f2db34 100644 --- a/docs/crates.js +++ b/docs/crates.js @@ -1 +1,2 @@ -window.ALL_CRATES = ["casper_name_contracts"]; \ No newline at end of file +window.ALL_CRATES = ["casper_name_contracts"]; +//{"start":21,"fragment_lengths":[23]} \ No newline at end of file diff --git a/docs/help.html b/docs/help.html index d74cf41..16a34b8 100644 --- a/docs/help.html +++ b/docs/help.html @@ -1 +1 @@ -Help

Rustdoc help

Back
\ No newline at end of file +Help

Rustdoc help

Back
\ No newline at end of file diff --git a/docs/search-index.js b/docs/search-index.js index a20b516..e71160f 100644 --- a/docs/search-index.js +++ b/docs/search-index.js @@ -1,5 +1,4 @@ -var searchIndex = new Map(JSON.parse('[\ -["casper_name_contracts",{"t":"CCCCCCCCFFFPFFGFFPPPFPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNONNNONNNNNNNNNNNNNNNNNNNNNNPPPPFFGFFPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNSPPFFGFFPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFPFFPPFGFPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPKFGFFPKFFFFPFPPFFNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNOOOOOOMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONN","n":["contracts","data_structures","controller","marketplace","name_token","registrar","resolver","reverse_resolver","BaseController","BaseControllerContractRef","BaseControllerHostRef","BuyerMustBeCaller","Controller","ControllerContractRef","ControllerError","ControllerHostRef","ControllerInitArgs","FeeCollectorNotSet","InsufficientPayment","InvalidSignature","PaymentFulfilled","RegistrarNotSet","address","address","address","address","address","address","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","buy","buy","buy","buy_and_renew","buy_and_renew","buy_and_renew","cl_type","cl_type","custom_types","custom_types","deploy","deploy","entry_points_caller","entry_points_caller","entrypoints","entrypoints","env","env","env","env","eq","equivalent","equivalent","event_schemas","event_schemas","events","events","fmt","from","from","from","from","from","from","from","from","from","from_bytes","get_event","get_event","grant_role","grant_role","grant_role","grant_role","grant_role","grant_role","has_role","has_role","has_role","has_role","has_role","has_role","ident","ident","ident","ident","init","init","init","init","insert_runtime_arg","into","into","into","into","into","into","into","into","into","into","into_event","is_required","last_call","last_call","load","load","name","new","new","new","new","new","new","new","process_payment_voucher","registrar","renew","renew","renew","resolve","resolve","resolve","revert","revert","revoke_role","revoke_role","revoke_role","revoke_role","revoke_role","revoke_role","schema","schema_entrypoints","schema_entrypoints","schema_errors","schema_errors","schema_errors","schema_events","schema_events","schema_types","schema_types","schema_types","serialized_length","set_signer_public_key","set_signer_public_key","set_signer_public_key","set_signer_public_key","set_treasury","set_treasury","set_treasury","set_treasury","signer","signer_public_key","signer_public_key","signer_public_key","signer_public_key","to_bytes","treasury","try_buy","try_buy_and_renew","try_deploy","try_deploy","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_grant_role","try_grant_role","try_has_role","try_has_role","try_init","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_renew","try_resolve","try_revoke_role","try_revoke_role","try_set_signer_public_key","try_set_treasury","try_signer_public_key","ty","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unwrap","with_tokens","with_tokens","SecondaryMarket","SecondaryMarketContractRef","SecondaryMarketHostRef","SecondaryMarketInitArgs","address","address","address","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","buy","buy","buy","custom_types","deploy","entry_points_caller","entrypoints","env","env","event_schemas","events","from","from","from","from","get_event","grant_role","grant_role","grant_role","has_role","has_role","has_role","ident","ident","init","init","init","into","into","into","into","into","last_call","load","name_token","new","new","new","revert","revoke_role","revoke_role","revoke_role","schema_entrypoints","schema_errors","schema_events","schema_types","set_signer_public_key","set_signer_public_key","set_signer_public_key","set_treasury","set_treasury","set_treasury","signer","signer_public_key","signer_public_key","signer_public_key","treasury","try_buy","try_deploy","try_from","try_from","try_from","try_from","try_grant_role","try_has_role","try_init","try_into","try_into","try_into","try_into","try_revoke_role","try_set_signer_public_key","try_set_treasury","try_signer_public_key","type_id","type_id","type_id","type_id","with_tokens","ExpiredTokenTransfer","InvalidResolver","InvalidTokenIdentifier","InvalidTokenOwner","NameToken","NameTokenContractRef","NameTokenError","NameTokenHostRef","NameTokenInitArgs","NotWhitelisted","address","address","address","admin_transfer","admin_transfer","admin_transfer","approve","approve","approve","assert_is_owner","assert_is_owner","assert_is_owner","balance_of","balance_of","balance_of","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","burn","burn","burn","custom_types","deploy","entry_points_caller","entrypoints","env","env","event_schemas","events","from","from","from","from","from","get_approved","get_approved","get_approved","get_collection_name","get_collection_name","get_collection_name","get_collection_symbol","get_collection_symbol","get_collection_symbol","get_default_resolver","get_default_resolver","get_default_resolver","get_event","ident","ident","init","init","init","into","into","into","into","into","into","is_approved_for_all","is_approved_for_all","is_approved_for_all","is_token_valid","is_token_valid","is_token_valid","last_call","load","metadata","metadata","metadata","metadata_by_hash","metadata_by_hash","metadata_by_hash","mint","mint","mint","name","new","new","new","owner_of","owner_of","owner_of","register_owner","register_owner","register_owner","resolver","resolver","resolver","revert","revoke","revoke","revoke","schema_entrypoints","schema_errors","schema_errors","schema_events","schema_types","set_approval_for_all","set_approval_for_all","set_approval_for_all","set_default_resolver","set_default_resolver","set_default_resolver","set_resolver","set_resolver","set_resolver","set_token_metadata","set_token_metadata","set_token_metadata","set_variables","set_variables","set_variables","symbol","token_exists","token_exists","token_exists","transfer","transfer","transfer","try_admin_transfer","try_approve","try_assert_is_owner","try_balance_of","try_burn","try_deploy","try_from","try_from","try_from","try_from","try_from","try_get_approved","try_get_collection_name","try_get_collection_symbol","try_get_default_resolver","try_init","try_into","try_into","try_into","try_into","try_into","try_is_approved_for_all","try_is_token_valid","try_metadata","try_metadata_by_hash","try_mint","try_owner_of","try_register_owner","try_resolver","try_revoke","try_set_approval_for_all","try_set_default_resolver","try_set_resolver","try_set_token_metadata","try_set_variables","try_token_exists","try_transfer","type_id","type_id","type_id","type_id","type_id","with_tokens","wrapped_metadata","CONTROLLER_ROLE","ExpirationDateInThePast","GracePeriodExpired","Registrar","RegistrarContractRef","RegistrarError","RegistrarHostRef","RegistrarInitArgs","TokenDoesNotExist","TokenNotExpired","VoucherExpired","address","address","address","admin_burn","admin_burn","admin_burn","admin_prolong","admin_prolong","admin_prolong","admin_prolong_and_register","admin_prolong_and_register","admin_prolong_and_register","admin_register","admin_register","admin_register","admin_transfer","admin_transfer","admin_transfer","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","controller_prolong","controller_prolong","controller_prolong","controller_prolong_and_register","controller_prolong_and_register","controller_prolong_and_register","controller_register","controller_register","controller_register","custom_types","deploy","entry_points_caller","entrypoints","env","env","event_schemas","events","expire","expire","expire","from","from","from","from","from","get_event","grace_period","grace_period","grace_period","grant_role","grant_role","grant_role","has_role","has_role","has_role","ident","ident","init","init","init","into","into","into","into","into","into","last_call","load","name_token","new","new","new","resolve","resolve","resolve","revert","revoke_role","revoke_role","revoke_role","schema_entrypoints","schema_errors","schema_errors","schema_events","schema_types","set_grace_period","set_grace_period","set_grace_period","try_admin_burn","try_admin_prolong","try_admin_prolong_and_register","try_admin_register","try_admin_transfer","try_controller_prolong","try_controller_prolong_and_register","try_controller_register","try_deploy","try_expire","try_from","try_from","try_from","try_from","try_from","try_grace_period","try_grant_role","try_has_role","try_init","try_into","try_into","try_into","try_into","try_into","try_resolve","try_revoke_role","try_set_grace_period","type_id","type_id","type_id","type_id","type_id","with_tokens","DefaultResolver","DefaultResolverContractRef","DefaultResolverHostRef","DefaultResolverInitArgs","InvalidDomain","ResolutionChanged","ResolutionCleared","ResolutionSetByInvalidOwner","ResolutionSetWithInvalidToken","ResolverContractRef","ResolverError","ResolverHostRef","UnauthorizedCleanup","UnauthorizedTokenAddressUpdate","address","address","address","address","address","address","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cl_type","cl_type","cl_type","cl_type","cleanup","cleanup","cleanup","cleanup","cleanup","custom_types","deploy","entry_points_caller","entrypoints","env","env","env","eq","eq","equivalent","equivalent","equivalent","equivalent","event_schemas","events","fmt","fmt","from","from","from","from","from","from","from","from","from","from_bytes","from_bytes","get_event","get_event","grant_role","grant_role","grant_role","has_role","has_role","has_role","ident","ident","init","init","init","init","init","insert_runtime_arg","insert_runtime_arg","into","into","into","into","into","into","into","into","into","into","into_event","into_event","is_required","is_required","last_call","last_call","load","name","name","name_token","new","new","new","new","new","new","new","resolve","resolve","resolve","resolve","resolve","revert","revoke_role","revoke_role","revoke_role","schema","schema","schema_entrypoints","schema_errors","schema_errors","schema_events","schema_types","schema_types","schema_types","serialized_length","serialized_length","set_name_token","set_name_token","set_name_token","set_name_token","set_name_token","set_resolution","set_resolution","set_resolution","set_resolution","set_resolution","to_bytes","to_bytes","try_cleanup","try_cleanup","try_deploy","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_grant_role","try_has_role","try_init","try_init","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_resolve","try_resolve","try_revoke_role","try_set_name_token","try_set_name_token","try_set_resolution","try_set_resolution","ty","ty","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unwrap","unwrap","with_tokens","with_tokens","PrimaryNameChanged","ReverseResolver","ReverseResolverContractRef","ReverseResolverHostRef","address","address","address","address","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cl_type","cl_type","custom_types","deploy","entry_points_caller","entrypoints","env","env","eq","equivalent","equivalent","event_schemas","events","fmt","from","from","from","from","from_bytes","get_event","get_primary_name","get_primary_name","get_primary_name","ident","ident","insert_runtime_arg","into","into","into","into","into_event","is_required","last_call","load","name","new","new","new","new","new_primary_name","old_primary_name","revert","schema","schema_entrypoints","schema_errors","schema_events","schema_types","schema_types","serialized_length","set_primary_name","set_primary_name","set_primary_name","to_bytes","try_deploy","try_from","try_from","try_from","try_from","try_get_primary_name","try_into","try_into","try_into","try_into","try_set_primary_name","ty","type_id","type_id","type_id","type_id","unwrap","with_tokens","DeserializationError","EmptyLabel","EmptyTLD","ExpirableVoucher","NameMintInfo","NameTokenError","NameTokenMetadata","NameTransferInfo","PastExpirationDate","Payment","PaymentInfo","PaymentVoucher","RenewalPaymentVoucher","RenewalVoucher","SLDDoesNotExist","SecondarySaleVoucher","SerializationError","TLDNotSupported","TokenRenewalInfo","TokenizationVoucher","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","amount","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","buyer","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","cl_type","clear_resolver","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","deserialize","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","event_schemas","event_schemas","event_schemas","event_schemas","event_schemas","event_schemas","event_schemas","event_schemas","event_schemas","events","events","events","events","events","events","events","events","events","expiration","expiration_time","expiration_time","expiration_time","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from_bytes","from_bytes","from_bytes","from_bytes","from_bytes","from_bytes","from_bytes","from_bytes","from_bytes","insert_runtime_arg","insert_runtime_arg","insert_runtime_arg","insert_runtime_arg","insert_runtime_arg","insert_runtime_arg","insert_runtime_arg","insert_runtime_arg","insert_runtime_arg","into","into","into","into","into","into","into","into","into","into","into","is_required","is_required","is_required","is_required","is_required","is_required","is_required","is_required","is_required","json","label","label","names","names","names","new","new","new","new","new","new","owner","owner","payment","payment","payment","payment_id","payment_info","payment_info","payment_info","payment_info","resolver","schema_errors","schema_types","schema_types","schema_types","schema_types","schema_types","schema_types","schema_types","schema_types","schema_types","serialize","serialized_length","serialized_length","serialized_length","serialized_length","serialized_length","serialized_length","serialized_length","serialized_length","serialized_length","set_expiration","set_resolver","to_bytes","to_bytes","to_bytes","to_bytes","to_bytes","to_bytes","to_bytes","to_bytes","to_bytes","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","token_expiration","token_expiration","token_id","tokens","tokens","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","ty","ty","ty","ty","ty","ty","ty","ty","ty","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unwrap","unwrap","unwrap","unwrap","unwrap","unwrap","unwrap","unwrap","unwrap","voucher_expiration","voucher_expiration","voucher_expiration","voucher_expiration","voucher_expiration","with_no_resolver","with_resolver"],"q":[[0,"casper_name_contracts"],[2,"casper_name_contracts::contracts"],[8,"casper_name_contracts::contracts::controller"],[221,"casper_name_contracts::contracts::marketplace"],[315,"casper_name_contracts::contracts::name_token"],[495,"casper_name_contracts::contracts::registrar"],[634,"casper_name_contracts::contracts::resolver"],[832,"casper_name_contracts::contracts::reverse_resolver"],[919,"casper_name_contracts::data_structures"],[1253,"odra_core::address"],[1254,"casper_name_contracts::contracts::controller::__controller_test_parts"],[1255,"casper_name_contracts::contracts::controller::__base_controller_test_parts"],[1256,"casper_types::bytesrepr::bytes"],[1257,"casper_types::cl_type"],[1258,"casper_contract_schema"],[1259,"core::option"],[1260,"alloc::vec"],[1261,"odra_core::host"],[1262,"odra_core::entry_point_callback"],[1263,"odra_core::contract_def"],[1264,"odra_core::contract_env"],[1265,"alloc::rc"],[1266,"alloc::string"],[1267,"casper_event_standard::schema"],[1268,"alloc::collections::btree::map"],[1269,"core::fmt"],[1270,"casper_types::bytesrepr"],[1271,"core::result"],[1272,"odra_core::error"],[1273,"casper_event_standard"],[1274,"odra_modules::access::access_control"],[1275,"casper_types::crypto::asymmetric_key"],[1276,"casper_types::runtime_args"],[1277,"odra_core::call_result"],[1278,"casper_types::uint::macro_code"],[1279,"core::convert"],[1280,"casper_contract_schema::ty"],[1281,"core::any"],[1282,"casper_name_contracts::contracts::marketplace::__secondary_market_test_parts"],[1283,"casper_name_contracts::contracts::name_token::__name_token_test_parts"],[1284,"odra_core::args"],[1285,"casper_name_contracts::contracts::registrar::__registrar_test_parts"],[1286,"casper_name_contracts::contracts::resolver::__resolver_test_parts"],[1287,"casper_name_contracts::contracts::resolver::__default_resolver_test_parts"],[1288,"casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts"],[1289,"dyn_clone::sealed"],[1290,"serde::de"],[1291,"serde::ser"]],"i":[0,0,0,0,0,0,0,0,0,0,0,96,0,0,0,0,0,96,96,96,0,96,1,3,3,4,5,5,21,6,1,3,42,20,4,5,96,21,6,1,3,42,20,4,5,96,6,1,3,6,1,3,21,21,6,20,6,20,3,5,6,20,6,3,20,5,21,21,21,6,20,6,20,21,21,6,1,3,42,20,4,5,96,21,3,5,6,1,3,20,4,5,6,1,3,20,4,5,6,3,20,5,6,1,3,20,21,21,6,1,3,42,42,20,4,5,96,21,21,3,5,6,20,21,21,6,1,3,20,4,5,20,42,6,1,3,6,1,3,6,20,6,1,3,20,4,5,21,6,20,6,20,96,6,20,21,6,20,21,6,1,3,20,6,1,3,20,42,6,1,3,20,21,42,3,3,6,20,21,6,1,3,42,20,4,5,96,3,5,3,5,3,21,6,1,3,42,20,4,5,96,3,3,3,5,3,3,3,21,21,6,1,3,42,20,4,5,96,21,3,5,0,0,0,0,57,58,58,59,57,58,61,59,57,58,61,59,57,58,59,59,58,59,59,58,59,59,59,57,58,61,58,59,57,58,59,57,58,59,58,59,57,58,59,57,58,61,61,58,59,61,59,57,58,59,59,57,58,59,59,59,59,59,57,58,59,57,58,61,59,57,58,61,58,59,59,57,58,61,58,58,58,59,57,58,61,58,58,58,58,59,57,58,61,58,97,97,97,97,0,0,0,0,0,97,62,63,63,64,62,63,64,62,63,64,62,63,64,62,63,64,62,63,67,97,64,62,63,67,97,64,62,63,64,64,63,64,64,63,64,64,64,62,63,67,97,64,62,63,64,62,63,64,62,63,64,62,63,63,64,63,64,62,63,64,62,63,67,67,97,64,62,63,64,62,63,63,64,64,62,63,64,62,63,64,62,63,67,64,62,63,64,62,63,64,62,63,64,62,63,64,64,62,63,64,64,97,64,64,64,62,63,64,62,63,64,62,63,64,62,63,64,62,63,67,64,62,63,64,62,63,63,63,63,63,63,64,64,62,63,67,97,63,63,63,63,63,64,62,63,67,97,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,64,62,63,67,97,63,64,0,98,98,0,0,0,0,0,98,98,98,69,70,70,71,69,70,71,69,70,71,69,70,71,69,70,71,69,70,71,69,70,76,98,71,69,70,76,98,71,69,70,71,69,70,71,69,70,71,71,70,71,71,70,71,71,71,69,70,71,69,70,76,98,70,71,69,70,71,69,70,71,69,70,71,70,71,69,70,71,69,70,76,76,98,70,71,76,71,69,70,71,69,70,71,71,69,70,71,71,98,71,71,71,69,70,70,70,70,70,70,70,70,70,71,70,71,69,70,76,98,70,70,70,70,71,69,70,76,98,70,70,70,71,69,70,76,98,70,0,0,0,0,99,0,0,99,99,0,0,0,99,99,77,78,78,79,80,80,77,78,82,83,81,79,80,84,99,77,78,82,83,81,79,80,84,99,82,82,83,83,77,78,81,79,80,81,81,80,81,78,81,80,82,83,82,82,83,83,81,81,82,83,77,78,82,83,81,79,80,84,99,82,83,78,80,81,79,80,81,79,80,81,80,77,78,81,79,80,82,83,77,78,82,83,81,79,80,84,84,99,82,83,82,83,78,80,81,82,83,84,77,78,82,83,81,79,80,77,78,81,79,80,81,81,79,80,82,83,81,81,99,81,82,83,81,82,83,77,78,81,79,80,77,78,81,79,80,82,83,78,80,81,77,78,82,83,81,79,80,84,99,80,80,78,80,77,78,82,83,81,79,80,84,99,78,80,80,78,80,78,80,82,83,77,78,82,83,81,79,80,84,99,82,83,78,80,0,0,0,0,85,86,86,88,87,85,86,88,87,85,86,88,88,88,87,87,86,87,87,86,88,88,88,87,87,88,87,85,86,88,88,86,87,85,86,87,86,88,87,85,86,88,88,88,86,87,88,87,85,86,88,88,88,87,88,87,87,87,87,88,88,87,85,86,88,87,87,85,86,88,86,87,85,86,88,86,88,87,85,86,88,88,86,94,94,94,0,0,0,0,0,94,0,0,0,0,0,94,0,94,94,0,0,68,90,75,7,60,91,73,72,10,74,90,94,68,90,75,7,60,91,73,72,10,74,94,68,90,75,7,60,91,73,72,10,74,90,90,90,75,75,7,7,60,60,91,91,73,73,72,72,10,10,74,74,68,68,90,75,7,60,91,73,72,10,74,68,90,75,7,60,91,73,72,10,74,68,68,90,75,7,60,91,73,72,10,74,90,90,75,75,7,7,60,60,91,91,73,73,72,72,10,10,74,74,90,75,7,60,91,73,72,10,74,90,75,7,60,91,73,72,10,74,68,93,75,74,94,68,90,75,7,60,91,73,72,10,74,94,68,90,75,75,7,60,91,73,72,10,74,74,90,75,7,60,91,73,72,10,74,90,75,7,60,91,73,72,10,74,94,68,90,75,7,60,91,73,72,10,74,90,75,7,60,91,73,72,10,74,68,91,73,75,7,60,75,7,73,72,10,74,91,73,7,60,10,90,45,7,60,10,68,94,90,75,7,60,91,73,72,10,74,68,90,75,7,60,91,73,72,10,74,68,68,90,75,7,60,91,73,72,10,74,68,90,75,7,60,91,73,72,10,74,73,72,72,10,74,94,68,68,90,75,7,60,91,73,72,10,74,94,68,90,75,7,60,91,73,72,10,74,90,75,7,60,91,73,72,10,74,94,68,90,75,7,60,91,73,72,10,74,90,75,7,60,91,73,72,10,74,75,7,60,10,74,68,68],"f":"``````````````````````{bd}{fd}{cd{}}{hd}{jd}2{ce{}{}}00000000000000000{{lnA`}Ab}{{bnA`}Ab}{{fnA`}Ab}{{lnA`AdA`}Ab}{{bnA`AdA`}Ab}{{fnA`AdA`}Ab}{{}Af}0{{}{{Al{{Aj{Ah}}}}}}0{An}0{AnB`}0{{}{{Al{Bb}}}}0{l{{Bf{Bd}}}}{fAn}{Bh{{Bf{Bd}}}}{jAn}{{BjBj}Bl}{{ce}Bl{}{}}0{{}{{Cb{BnC`}}}}0{{}{{Al{Cd}}}}0{{BjCf}Ch}{cc{}}00000000{{{Cl{Cj}}}{{Db{{Cn{Bj{Cl{Cj}}}}D`}}}}{{fDd}{{Db{cDf}}}{DhDj}}{{jDd}{{Db{cDf}}}{DhDj}}{{lDld}Ab}{{bDld}Ab}{{fDld}Ab}{{BhDld}Ab}{{hDld}Ab}{{jDld}Ab}{{lDld}Bl}{{bDld}Bl}{{fDld}Bl}{{BhDld}Bl}{{hDld}Bl}{{jDld}Bl}{{}Bn}000{{ldDnd}Ab}{{bdDnd}Ab}{{fdDnd}Ab}{{BhDnd}Ab}{{cE`Eb}Ab{}}{ce{}{}}000{EdEb}11111{{}Cd}{{}Bl}{fEf}{jEf}{{And}}0<{{BndEh}Bj}{{{Bf{Bd}}}l}{{{Bf{Bd}}d}b}{{dAn}f}{{{Bf{Bd}}}Bh}{{{Bf{Bd}}d}h}{{dAn}j}{{BhcA`}Ab{EjEl}}`{{lAdA`}Ab}{{bAdA`}Ab}{{fAdA`}Ab}{{lBn}{{Aj{d}}}}{{bBn}{{Aj{d}}}}{{fBn}{{Aj{d}}}}{{ce}En{}{{Fb{F`}}}}0{{lDld}Ab}{{bDld}Ab}{{fDld}Ab}{{BhDld}Ab}{{hDld}Ab}{{jDld}Ab}{{}C`}{{}{{Al{Fd}}}}0{{}{{Al{Ff}}}}00{{}{{Al{Fh}}}}0{{}{{Al{{Aj{Ah}}}}}}00{BjFj}{{lDn}Ab}{{bDn}Ab}{{fDn}Ab}{{BhDn}Ab}{{ld}Ab}{{bd}Ab}{{fd}Ab}{{Bhd}Ab}`{lDn}{bDn}{fDn}{BhDn}{Bj{{Db{{Al{Cj}}D`}}}}`{{fnA`}{{Fl{Ab}}}}{{fnA`AdA`}{{Fl{Ab}}}}{An{{Db{F`}}}}0{c{{Db{e}}}{}{}}00000000{{fDld}{{Fl{Ab}}}}{{jDld}{{Fl{Ab}}}}{{fDld}{{Fl{Bl}}}}{{jDld}{{Fl{Bl}}}}{{fdDnd}{{Fl{Ab}}}}555555555{{fAdA`}{{Fl{Ab}}}}{{fBn}{{Fl{{Aj{d}}}}}}65{{fDn}{{Fl{Ab}}}}{{fd}{{Fl{Ab}}}}{f{{Fl{Dn}}}}{{}Fn}{cG`{}}00000000{{{Aj{c}}Bd}c{}}{{fEh}f}{{jEh}j}````{Gbd}{cd{}}{Gdd}{ce{}{}}0000000{{GfGhA`}Ab}{{GbGhA`}Ab}{{GdGhA`}Ab}{{}{{Al{{Aj{Ah}}}}}}{An}{AnB`}{{}{{Al{Bb}}}}{Gf{{Bf{Bd}}}}{GdAn}{{}{{Cb{BnC`}}}}{{}{{Al{Cd}}}}{cc{}}000{{GdDd}{{Db{cDf}}}{DhDj}}{{GfDld}Ab}{{GbDld}Ab}{{GdDld}Ab}{{GfDld}Bl}{{GbDld}Bl}{{GdDld}Bl}{{}Bn}0{{GfDndd}Ab}{{GbDndd}Ab}{{GdDndd}Ab}{ce{}{}}00{GjEb}1{GdEf}{{And}}`{{{Bf{Bd}}}Gf}{{{Bf{Bd}}d}Gb}{{dAn}Gd}{{ce}En{}{{Fb{F`}}}}{{GfDld}Ab}{{GbDld}Ab}{{GdDld}Ab}{{}{{Al{Fd}}}}{{}{{Al{Ff}}}}{{}{{Al{Fh}}}}{{}{{Al{{Aj{Ah}}}}}}{{GfDn}Ab}{{GbDn}Ab}{{GdDn}Ab}{{Gfd}Ab}{{Gbd}Ab}{{Gdd}Ab}`{GfDn}{GbDn}{GdDn}`{{GdGhA`}{{Fl{Ab}}}}{An{{Db{F`}}}}{c{{Db{e}}}{}{}}000{{GdDld}{{Fl{Ab}}}}{{GdDld}{{Fl{Bl}}}}{{GdDndd}{{Fl{Ab}}}}33332{{GdDn}{{Fl{Ab}}}}{{Gdd}{{Fl{Ab}}}}{Gd{{Fl{Dn}}}}{cG`{}}000{{GdEh}Gd}``````````{Gld}{cd{}}{Gnd}{{H`d{Al{Bn}}}Ab}{{Gld{Al{Bn}}}Ab}{{Gnd{Al{Bn}}}Ab}{{H`d{Hd{Hb}}{Hd{Bn}}}Ab}{{Gld{Hd{Hb}}{Hd{Bn}}}Ab}{{Gnd{Hd{Hb}}{Hd{Bn}}}Ab}{{H`Bnd}Ab}{{GlBnd}Ab}{{GnBnd}Ab}{{H`d}Hb}{{Gld}Hb}{{Gnd}Hb}{ce{}{}}000000000{{H`{Hd{Hb}}{Hd{Bn}}}Ab}{{Gl{Hd{Hb}}{Hd{Bn}}}Ab}{{Gn{Hd{Hb}}{Hd{Bn}}}Ab}{{}{{Al{{Aj{Ah}}}}}}{An}{AnB`}{{}{{Al{Bb}}}}{H`{{Bf{Bd}}}}{GnAn}{{}{{Cb{BnC`}}}}{{}{{Al{Cd}}}}{cc{}}0000{{H`{Hd{Hb}}{Hd{Bn}}}{{Aj{d}}}}{{Gl{Hd{Hb}}{Hd{Bn}}}{{Aj{d}}}}{{Gn{Hd{Hb}}{Hd{Bn}}}{{Aj{d}}}}{H`Bn}{GlBn}{GnBn}210{H`d}{Gld}{Gnd}{{GnDd}{{Db{cDf}}}{DhDj}}{{}Bn}0{{H`BnBn}Ab}{{GlBnBn}Ab}{{GnBnBn}Ab}{ce{}{}}000{HfEb}1{{H`dd}Bl}{{Gldd}Bl}{{Gndd}Bl}{{H`Bn}Bl}{{GlBn}Bl}{{GnBn}Bl}{GnEf}{{And}}{{H`{Hd{Hb}}{Hd{Bn}}}Bn}{{Gl{Hd{Hb}}{Hd{Bn}}}Bn}{{Gn{Hd{Hb}}{Hd{Bn}}}Bn}{{H`Bn}Bn}{{GlBn}Bn}{{GnBn}Bn}{{H`dBn{Hd{Bn}}}Ab}{{GldBn{Hd{Bn}}}Ab}{{GndBn{Hd{Bn}}}Ab}`{{{Bf{Bd}}}H`}{{{Bf{Bd}}d}Gl}{{dAn}Gn}{{H`{Hd{Hb}}{Hd{Bn}}}d}{{Gl{Hd{Hb}}{Hd{Bn}}}d}{{Gn{Hd{Hb}}{Hd{Bn}}}d}{{H`{Hd{d}}}Bn}{{Gl{Hd{d}}}Bn}{{Gn{Hd{d}}}Bn}{{H`Bn}{{Aj{d}}}}{{GlBn}{{Aj{d}}}}{{GnBn}{{Aj{d}}}}{{ce}En{}{{Fb{F`}}}}{{H`{Hd{Hb}}{Hd{Bn}}}Ab}{{Gl{Hd{Hb}}{Hd{Bn}}}Ab}{{Gn{Hd{Hb}}{Hd{Bn}}}Ab}{{}{{Al{Fd}}}}{{}{{Al{Ff}}}}0{{}{{Al{Fh}}}}{{}{{Al{{Aj{Ah}}}}}}{{H`Bld}Ab}{{GlBld}Ab}{{GnBld}Ab}{{H`d}Ab}{{Gld}Ab}{{Gnd}Ab}{{H`Bnd}Ab}{{GlBnd}Ab}{{GnBnd}Ab}{{H`{Hd{Hb}}{Hd{Bn}}Bn}Ab}{{Gl{Hd{Hb}}{Hd{Bn}}Bn}Ab}{{Gn{Hd{Hb}}{Hd{Bn}}Bn}Ab}{{H`{Hd{Bl}}{Hd{{Al{d}}}}{Hd{Bl}}}Ab}{{Gl{Hd{Bl}}{Hd{{Al{d}}}}{Hd{Bl}}}Ab}{{Gn{Hd{Bl}}{Hd{{Al{d}}}}{Hd{Bl}}}Ab}`{{H`Bn}Bl}{{GlBn}Bl}{{GnBn}Bl}{{H`{Hd{Hb}}{Hd{Bn}}dd}Ab}{{Gl{Hd{Hb}}{Hd{Bn}}dd}Ab}{{Gn{Hd{Hb}}{Hd{Bn}}dd}Ab}{{Gnd{Al{Bn}}}{{Fl{Ab}}}}{{Gnd{Hd{Hb}}{Hd{Bn}}}{{Fl{Ab}}}}{{GnBnd}{{Fl{Ab}}}}{{Gnd}{{Fl{Hb}}}}{{Gn{Hd{Hb}}{Hd{Bn}}}{{Fl{Ab}}}}{An{{Db{F`}}}}{c{{Db{e}}}{}{}}0000{{Gn{Hd{Hb}}{Hd{Bn}}}{{Fl{{Aj{d}}}}}}{Gn{{Fl{Bn}}}}0{Gn{{Fl{d}}}}{{GnBnBn}{{Fl{Ab}}}}44444{{Gndd}{{Fl{Bl}}}}{{GnBn}{{Fl{Bl}}}}{{Gn{Hd{Hb}}{Hd{Bn}}}{{Fl{Bn}}}}{{GnBn}{{Fl{Bn}}}}{{GndBn{Hd{Bn}}}{{Fl{Ab}}}}{{Gn{Hd{Hb}}{Hd{Bn}}}{{Fl{d}}}}{{Gn{Hd{d}}}{{Fl{Bn}}}}{{GnBn}{{Fl{{Aj{d}}}}}}>{{GnBld}{{Fl{Ab}}}}{{Gnd}{{Fl{Ab}}}}{{GnBnd}{{Fl{Ab}}}}{{Gn{Hd{Hb}}{Hd{Bn}}Bn}{{Fl{Ab}}}}{{Gn{Hd{Bl}}{Hd{{Al{d}}}}{Hd{Bl}}}{{Fl{Ab}}}};{{Gn{Hd{Hb}}{Hd{Bn}}dd}{{Fl{Ab}}}}{cG`{}}0000{{GnEh}Gn}{{H`E`}Hh}```````````{Hjd}{Hld}{cd{}}{{Hn{Al{Bn}}}Ab}{{Hj{Al{Bn}}}Ab}{{Hl{Al{Bn}}}Ab}{{Hn{Al{I`}}}Ab}{{Hj{Al{I`}}}Ab}{{Hl{Al{I`}}}Ab}{{Hn{Al{I`}}{Al{Ib}}}Ab}{{Hj{Al{I`}}{Al{Ib}}}Ab}{{Hl{Al{I`}}{Al{Ib}}}Ab}{{Hn{Al{Ib}}}Ab}{{Hj{Al{Ib}}}Ab}{{Hl{Al{Ib}}}Ab}{{Hnd{Al{Bn}}}Ab}{{Hjd{Al{Bn}}}Ab}{{Hld{Al{Bn}}}Ab}{ce{}{}}000000000{{HnId}Ab}{{HjId}Ab}{{HlId}Ab}{{HnIdIf}Ab}{{HjIdIf}Ab}{{HlIdIf}Ab}{{HnIf}Ab}{{HjIf}Ab}{{HlIf}Ab}{{}{{Al{{Aj{Ah}}}}}}{An}{AnB`}{{}{{Al{Bb}}}}{Hn{{Bf{Bd}}}}{HlAn}{{}{{Cb{BnC`}}}}{{}{{Al{Cd}}}}{{Hn{Al{Bn}}}Ab}{{Hj{Al{Bn}}}Ab}{{Hl{Al{Bn}}}Ab}{cc{}}0000{{HlDd}{{Db{cDf}}}{DhDj}}{HnHb}{HjHb}{HlHb}{{HnDld}Ab}{{HjDld}Ab}{{HlDld}Ab}{{HnDld}Bl}{{HjDld}Bl}{{HlDld}Bl}{{}Bn}0{{Hnd}Ab}{{Hjd}Ab}{{Hld}Ab}{ce{}{}}000{IhEb}1{HlEf}{{And}}`{{{Bf{Bd}}}Hn}{{{Bf{Bd}}d}Hj}{{dAn}Hl}{{HnBn}{{Aj{d}}}}{{HjBn}{{Aj{d}}}}{{HlBn}{{Aj{d}}}}{{ce}En{}{{Fb{F`}}}}{{HnDld}Ab}{{HjDld}Ab}{{HlDld}Ab}{{}{{Al{Fd}}}}{{}{{Al{Ff}}}}0{{}{{Al{Fh}}}}{{}{{Al{{Aj{Ah}}}}}}{{HnHb}Ab}{{HjHb}Ab}{{HlHb}Ab}{{Hl{Al{Bn}}}{{Fl{Ab}}}}{{Hl{Al{I`}}}{{Fl{Ab}}}}{{Hl{Al{I`}}{Al{Ib}}}{{Fl{Ab}}}}{{Hl{Al{Ib}}}{{Fl{Ab}}}}{{Hld{Al{Bn}}}{{Fl{Ab}}}}{{HlId}{{Fl{Ab}}}}{{HlIdIf}{{Fl{Ab}}}}{{HlIf}{{Fl{Ab}}}}{An{{Db{F`}}}}8{c{{Db{e}}}{}{}}0000{Hl{{Fl{Hb}}}}{{HlDld}{{Fl{Ab}}}}{{HlDld}{{Fl{Bl}}}}{{Hld}{{Fl{Ab}}}}44444{{HlBn}{{Fl{{Aj{d}}}}}}3{{HlHb}{{Fl{Ab}}}}{cG`{}}0000{{HlEh}Hl}``````````````{Ijd}{cd{}}{Ild}{Ind}{J`d}3{ce{}{}}00000000000000000{{}Af}000{{IjBn}Ab}{{IlBn}Ab}{{JbBn}Ab}{{InBn}Ab}{{J`Bn}Ab}{{}{{Al{{Aj{Ah}}}}}}{An}{AnB`}{{}{{Al{Bb}}}}{IlAn}{Jb{{Bf{Bd}}}}{J`An}{{JdJd}Bl}{{JfJf}Bl}{{ce}Bl{}{}}000{{}{{Cb{BnC`}}}}{{}{{Al{Cd}}}}{{JdCf}Ch}{{JfCf}Ch}{cc{}}00000000{{{Cl{Cj}}}{{Db{{Cn{Jd{Cl{Cj}}}}D`}}}}{{{Cl{Cj}}}{{Db{{Cn{Jf{Cl{Cj}}}}D`}}}}{{IlDd}{{Db{cDf}}}{DhDj}}{{J`Dd}{{Db{cDf}}}{DhDj}}{{JbDld}Ab}{{InDld}Ab}{{J`Dld}Ab}{{JbDld}Bl}{{InDld}Bl}{{J`Dld}Bl}{{}Bn}0{{Ijd}Ab}{{Ild}Ab}{{Jbd}Ab}{{Ind}Ab}{{J`d}Ab}{{cE`Eb}Ab{}}0{ce{}{}}000000{JhEb}11{{}Cd}0{{}Bl}0{IlEf}{J`Ef}{{And}}==`{{{Bf{Bd}}d}Ij}{{dAn}Il}{{Bn{Aj{d}}}Jd}{BnJf}{{{Bf{Bd}}}Jb}{{{Bf{Bd}}d}In}{{dAn}J`}{{IjBn}{{Aj{d}}}}{{IlBn}{{Aj{d}}}}{{JbBn}{{Aj{d}}}}{{InBn}{{Aj{d}}}}{{J`Bn}{{Aj{d}}}}{{ce}En{}{{Fb{F`}}}}{{JbDld}Ab}{{InDld}Ab}{{J`Dld}Ab}{{}C`}0{{}{{Al{Fd}}}}{{}{{Al{Ff}}}}0{{}{{Al{Fh}}}}{{}{{Al{{Aj{Ah}}}}}}00{JdFj}{JfFj}{{Ijd}Ab}{{Ild}Ab}{{Jbd}Ab}{{Ind}Ab}{{J`d}Ab}{{IjBn{Aj{d}}}Ab}{{IlBn{Aj{d}}}Ab}{{JbBn{Aj{d}}}Ab}{{InBn{Aj{d}}}Ab}{{J`Bn{Aj{d}}}Ab}{Jd{{Db{{Al{Cj}}D`}}}}{Jf{{Db{{Al{Cj}}D`}}}}{{IlBn}{{Fl{Ab}}}}{{J`Bn}{{Fl{Ab}}}}{An{{Db{F`}}}}{c{{Db{e}}}{}{}}00000000{{J`Dld}{{Fl{Ab}}}}{{J`Dld}{{Fl{Bl}}}}{{Ild}{{Fl{Ab}}}}{{J`d}{{Fl{Ab}}}}444444444{{IlBn}{{Fl{{Aj{d}}}}}}{{J`Bn}{{Fl{{Aj{d}}}}}}532{{IlBn{Aj{d}}}{{Fl{Ab}}}}{{J`Bn{Aj{d}}}{{Fl{Ab}}}}{{}Fn}0{cG`{}}00000000{{{Aj{c}}Bd}c{}}0{{IlEh}Il}{{J`Eh}J`}````{Jjd}{cd{}}{Jld}`{ce{}{}}0000000{{}Af}0{{}{{Al{{Aj{Ah}}}}}}{An}{AnB`}{{}{{Al{Bb}}}}{Jn{{Bf{Bd}}}}{JlAn}{{K`K`}Bl}{{ce}Bl{}{}}0{{}{{Cb{BnC`}}}}{{}{{Al{Cd}}}}{{K`Cf}Ch}{cc{}}000{{{Cl{Cj}}}{{Db{{Cn{K`{Cl{Cj}}}}D`}}}}{{JlDd}{{Db{cDf}}}{DhDj}}{{Jnd}{{Aj{Bn}}}}{{Jjd}{{Aj{Bn}}}}{{Jld}{{Aj{Bn}}}}{{}Bn}0{{cE`Eb}Ab{}}{ce{}{}}000{{}Cd}{{}Bl}{JlEf}{{And}}6{{{Bf{Bd}}}Jn}{{{Bf{Bd}}d}Jj}{{dAn}Jl}{{d{Aj{Bn}}Bn}K`}``{{ce}En{}{{Fb{F`}}}}{{}C`}{{}{{Al{Fd}}}}{{}{{Al{Ff}}}}{{}{{Al{Fh}}}}{{}{{Al{{Aj{Ah}}}}}}0{K`Fj}{{JnBn}Ab}{{JjBn}Ab}{{JlBn}Ab}{K`{{Db{{Al{Cj}}D`}}}}{An{{Db{F`}}}}{c{{Db{e}}}{}{}}000{{Jld}{{Fl{{Aj{Bn}}}}}}1111{{JlBn}{{Fl{Ab}}}}{{}Fn}{cG`{}}000{{{Aj{c}}Bd}c{}}{{JlEh}Jl}````````````````````{{cKb}Ab{}}000000000`{ce{}{}}000000000000000000000`{{}Af}00000000000000000{HhAb}{HhHh}{KdKd}{IfIf}{nn}{GhGh}{KfKf}{IbIb}{I`I`}{AdAd}{IdId}{{ce}Ab{}{}}000000000{c{{Db{Hh}}}Kh}{{HhHh}Bl}{{KdKd}Bl}{{IfIf}Bl}{{nn}Bl}{{GhGh}Bl}{{KfKf}Bl}{{IbIb}Bl}{{I`I`}Bl}{{AdAd}Bl}{{IdId}Bl}{{ce}Bl{}{}}00000000000000000{{}{{Cb{BnC`}}}}00000000{{}{{Al{Cd}}}}00000000{Hh{{Fl{Hb}}}}{KjHb}{IfHb}{IdHb}{{KlCf}Ch}{{HhCf}Ch}{{KdCf}Ch}{{IfCf}Ch}{{nCf}Ch}{{GhCf}Ch}{{KfCf}Ch}{{IbCf}Ch}{{I`Cf}Ch}{{AdCf}Ch}{{IdCf}Ch}{cc{}}00{nIf}1111111{AdId}2{{{Cl{Cj}}}{{Db{{Cn{Kd{Cl{Cj}}}}D`}}}}{{{Cl{Cj}}}{{Db{{Cn{If{Cl{Cj}}}}D`}}}}{{{Cl{Cj}}}{{Db{{Cn{n{Cl{Cj}}}}D`}}}}{{{Cl{Cj}}}{{Db{{Cn{Gh{Cl{Cj}}}}D`}}}}{{{Cl{Cj}}}{{Db{{Cn{Kf{Cl{Cj}}}}D`}}}}{{{Cl{Cj}}}{{Db{{Cn{Ib{Cl{Cj}}}}D`}}}}{{{Cl{Cj}}}{{Db{{Cn{I`{Cl{Cj}}}}D`}}}}{{{Cl{Cj}}}{{Db{{Cn{Ad{Cl{Cj}}}}D`}}}}{{{Cl{Cj}}}{{Db{{Cn{Id{Cl{Cj}}}}D`}}}}{{cE`Eb}Ab{}}00000000{ce{}{}}0000000000{{}Bl}00000000{HhBn}`````{{{Al{Ib}}Hb}If}{{EhE`d{Al{Ib}}Hb}n}{{E`dHb}Ib}{{BnHb}I`}{{EhE`d{Al{I`}}Hb}Ad}{{{Al{I`}}Hb}Id}``````{EjKd}{nKd}{GhKd}{AdKd}{Hh{{Fl{{Aj{d}}}}}}{{}{{Al{Ff}}}}{{}{{Al{{Aj{Ah}}}}}}00000000{{Hhc}DbKn}{KdFj}{IfFj}{nFj}{GhFj}{KfFj}{IbFj}{I`Fj}{AdFj}{IdFj}{{HhHb}Ab}{{Hhd}Ab}{Kd{{Db{{Al{Cj}}D`}}}}{If{{Db{{Al{Cj}}D`}}}}{n{{Db{{Al{Cj}}D`}}}}{Gh{{Db{{Al{Cj}}D`}}}}{Kf{{Db{{Al{Cj}}D`}}}}{Ib{{Db{{Al{Cj}}D`}}}}{I`{{Db{{Al{Cj}}D`}}}}{Ad{{Db{{Al{Cj}}D`}}}}{Id{{Db{{Al{Cj}}D`}}}}{ce{}{}}000000000`````{c{{Db{e}}}{}{}}{Bn{{Db{Hhc}}}{}}111111111111111111111{{}Fn}00000000{cG`{}}0000000000{{{Aj{c}}Bd}c{}}00000000`````{{E`Hb}Hh}{{E`Hbd}Hh}","D":"CH`","p":[[5,"ControllerContractRef",8],[6,"Address",1253],[5,"ControllerHostRef",8,1254],[5,"BaseControllerContractRef",8],[5,"BaseControllerHostRef",8,1255],[5,"Controller",8],[5,"PaymentVoucher",919],[5,"Bytes",1256],[1,"unit"],[5,"RenewalPaymentVoucher",919],[6,"CLType",1257],[6,"CustomType",1258],[6,"Option",1259],[5,"Vec",1260],[5,"HostEnv",1261],[5,"EntryPointsCaller",1262],[5,"Entrypoint",1263],[5,"ContractEnv",1264],[5,"Rc",1265],[5,"BaseController",8],[5,"PaymentFulfilled",8],[1,"bool"],[5,"String",1266],[5,"Schema",1267],[5,"BTreeMap",1268],[5,"Event",1263],[5,"Formatter",1269],[8,"Result",1269],[1,"u8"],[1,"slice"],[1,"tuple"],[6,"Error",1270],[6,"Result",1271],[1,"i32"],[6,"EventError",1272],[10,"FromBytes",1270],[10,"EventInstance",1273],[8,"Role",1274],[6,"PublicKey",1275],[1,"str"],[5,"RuntimeArgs",1276],[5,"ControllerInitArgs",8,1254],[5,"ContractCallResult",1277],[5,"U512",1278],[10,"Payment",919],[10,"ToBytes",1270],[1,"never"],[6,"OdraError",1272],[10,"Into",1279],[5,"Entrypoint",1258],[5,"UserError",1258],[5,"Event",1258],[1,"usize"],[8,"OdraResult",1272],[6,"NamedCLType",1280],[5,"TypeId",1281],[5,"SecondaryMarketContractRef",221],[5,"SecondaryMarketHostRef",221,1282],[5,"SecondaryMarket",221],[5,"SecondarySaleVoucher",919],[5,"SecondaryMarketInitArgs",221,1282],[5,"NameTokenContractRef",315],[5,"NameTokenHostRef",315,1283],[5,"NameToken",315],[1,"u64"],[6,"Maybe",1284],[5,"NameTokenInitArgs",315,1283],[5,"NameTokenMetadata",919],[5,"RegistrarContractRef",495],[5,"RegistrarHostRef",495,1285],[5,"Registrar",495],[5,"TokenRenewalInfo",919],[5,"NameMintInfo",919],[5,"RenewalVoucher",919],[5,"TokenizationVoucher",919],[5,"RegistrarInitArgs",495,1285],[5,"ResolverContractRef",634],[5,"ResolverHostRef",634,1286],[5,"DefaultResolverContractRef",634],[5,"DefaultResolverHostRef",634,1287],[5,"DefaultResolver",634],[5,"ResolutionChanged",634],[5,"ResolutionCleared",634],[5,"DefaultResolverInitArgs",634,1287],[5,"ReverseResolverContractRef",832],[5,"ReverseResolverHostRef",832,1288],[5,"ReverseResolver",832],[5,"PrimaryNameChanged",832],[5,"Private",1289],[5,"PaymentInfo",919],[5,"NameTransferInfo",919],[10,"Deserializer",1290],[10,"ExpirableVoucher",919],[6,"NameTokenError",919],[10,"Serializer",1291],[6,"ControllerError",8],[6,"NameTokenError",315],[6,"RegistrarError",495],[6,"ResolverError",634]],"r":[[10,1255],[15,1254],[16,1254],[223,1282],[224,1282],[322,1283],[323,1283],[501,1285],[502,1285],[636,1287],[637,1287],[645,1286],[835,1288]],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAACUDXQAAAAgADAAAABIAAgAWABgANQAVAFQAAgBjAAMAawAAAHAAAAB2AAYAfgAFAIUAAACMAAEAlAALAKgAAACtAAEAsQAKAMEACADRAAwA4gAKAPAABwD8AAAAAwEBAAsBAAANAQYAFwEDACEBAAAlAQAAJwEEAC8BAwA3AQgAQgEAAEUBAwBVAQkAYgEHAHsBAgCFAQAAjQEBAJgBAwClAQAAqQEEAL0BAADJAQUA1AEEAOkBCQD1AQAA+AEFAA0CCQAgAgcAMAIAADoCAQBDAgAARQIFAE4CAABSAgQAYgIAAGQCBABtAgQAdQIFAH8CAACCAgEAhQIAAIcCHwCqAhAAxAIDAM4CAwDVAgEA3gIAAOECCwDvAgQA9wIAAPsCDAALAwEAEAMBABQDCQAiAwgAMgMOAEUDGQBjAwEAaAMCAG8DBwB4AwkAhQMFAIwDAwCRAwoAoAMBAKYDAACoAwEArAOGADYEAAA+BAAAQAQRAF0EiAA="}]\ -]')); +var searchIndex = new Map(JSON.parse('[["casper_name_contracts",{"t":"CCCCCCCCCFFFPPFFGFFPPPFPPFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNONNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPFFGFFPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNSPFPPPFFGFFPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFPPPFFFPPFGFPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFFNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMPPPKPFGFFPKFFFFPFPPFFNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNOOOOOOMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNNNNNNNN","n":["contracts","data_structures","controller","marketplace","name_token","registrar","resolver","reverse_resolver","token_id","BaseController","BaseControllerContractRef","BaseControllerHostRef","BuyerMustBeCaller","ContractAddressExpected","Controller","ControllerContractRef","ControllerError","ControllerHostRef","ControllerInitArgs","FeeCollectorNotSet","InsufficientPayment","InvalidSignature","PaymentFulfilled","PaymentTooLarge","RegistrarNotSet","SignerPublicKeyChanged","TreasuryAddressChanged","address","","","","borrow","","","","","","","","","","","borrow_mut","","","","","","","","","","","buy","","","buy_and_renew","","","cl_type","","","","","","contract_address","","custom_types","","deploy","","deploy_with_cfg","","entry_points_caller","","entrypoints","","env","","","","eq","","","event_schemas","","events","","fmt","","","from","","","","","","","","","","","from_bytes","","","get_event","","grant_role","","","","","","has_role","","","","","","ident","","","","init","","","","insert_runtime_arg","","","into","","","","","","","","","","","","into_event","","","is_paused","","","","","","is_required","","","last_call","","load","","name","","","new","","","","","","","","","pause","","","","process_payment_voucher","registrar","renew","","","require_not_paused","","","resolve","","","revert","","revoke_role","","","","","","schema","","","schema_entrypoints","","schema_errors","","","schema_events","","schema_types","","","","","serialized_length","","","set_signer_public_key","","","","set_treasury","","","","signer","signer_public_key","","","","to_bytes","","","token_id","","treasury","try_buy","try_buy_and_renew","try_deploy","","try_deploy_with_cfg","","try_from","","","","","","","","","","","try_grant_role","","try_has_role","","try_init","try_into","","","","","","","","","","","try_is_paused","","try_pause","try_renew","try_require_not_paused","try_resolve","try_revoke_role","","try_set_signer_public_key","try_set_treasury","try_signer_public_key","try_unpause","ty","","","type_id","","","","","","","","","","","unpause","","","","unwrap","","","vzip","","","","","","","","","","","with_tokens","","","","SecondaryMarket","SecondaryMarketContractRef","SecondaryMarketHostRef","SecondaryMarketInitArgs","address","","borrow","","","","borrow_mut","","","","buy","","","contract_address","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","event_schemas","events","from","","","","get_event","grant_role","","","has_role","","","ident","","init","","","into","","","","","is_paused","","","last_call","load","name_token","new","","","pause","","","revert","revoke_role","","","schema_entrypoints","schema_errors","schema_events","schema_types","set_signer_public_key","","","set_treasury","","","signer","signer_public_key","","","token_id","treasury","try_buy","try_deploy","try_deploy_with_cfg","try_from","","","","try_grant_role","try_has_role","try_init","try_into","","","","try_is_paused","try_pause","try_revoke_role","try_set_signer_public_key","try_set_treasury","try_signer_public_key","try_unpause","type_id","","","","unpause","","","vzip","","","","with_tokens","","ExpiredTokenTransfer","InvalidResolver","InvalidTokenIdentifier","InvalidTokenOwner","NameToken","NameTokenContractRef","NameTokenError","NameTokenHostRef","NameTokenInitArgs","NotWhitelisted","TokenSupplyDepleted","WhitelistedAlready","accept_ownership","","","address","","admin_transfer","","","approve","","","approve_for_all","","","approved_for","","","assert_is_owner","","","balance_of","","","borrow","","","","","borrow_mut","","","","","burn","","","contract_address","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","event_schemas","events","from","","","","","get_default_resolver","","","get_event","get_owner","","","get_pending_owner","","","ident","","init","","","into","","","","","","is_approved_for_all","","","is_token_valid","","","last_call","load","max_supply","mint","","","name","","","","new","","","owner_of","","","renounce_ownership","","","resolver","","","revert","revoke_approval","","","revoke_approval_for_all","","","revoke_whitelist","","","safe_transfer_from","","","schema_entrypoints","schema_errors","","schema_events","schema_types","set_default_resolver","","","set_resolver","","","set_token_metadata","","","symbol","","","","token_exists","","","token_id","token_metadata","","","transfer_from","","","transfer_ownership","","","try_accept_ownership","try_admin_transfer","try_approve","try_approve_for_all","try_approved_for","try_assert_is_owner","try_balance_of","try_burn","try_deploy","try_deploy_with_cfg","try_from","","","","","try_get_default_resolver","try_get_owner","try_get_pending_owner","try_init","try_into","","","","","try_is_approved_for_all","try_is_token_valid","try_mint","try_name","try_owner_of","try_renounce_ownership","try_resolver","try_revoke_approval","try_revoke_approval_for_all","try_revoke_whitelist","try_safe_transfer_from","try_set_default_resolver","try_set_resolver","try_set_token_metadata","try_symbol","try_token_exists","try_token_metadata","try_transfer_from","try_transfer_ownership","try_whitelist","type_id","","","","","vzip","","","","","whitelist","","","with_tokens","","wrapped_metadata","CONTROLLER_ROLE","ExpirationDateInThePast","GracePeriodChanged","GracePeriodExpired","GracePeriodTooLong","NameTokenIsNotValid","Registrar","RegistrarContractRef","RegistrarError","RegistrarHostRef","RegistrarInitArgs","TokenDoesNotExist","TokenNameIsNotValid","TokenNotExpired","VoucherExpired","address","","admin_burn","","","admin_prolong","","","admin_prolong_and_register","","","admin_register","","","admin_transfer","","","borrow","","","","","","borrow_mut","","","","","","cl_type","","contract_address","controller_prolong","","","controller_prolong_and_register","","","controller_register","","","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","eq","event_schemas","events","expire","","","fmt","from","","","","","","from_bytes","get_event","grace_period","","","grant_role","","","has_role","","","ident","","init","","","insert_runtime_arg","into","","","","","","","into_event","is_paused","","","is_required","last_call","load","name","name_token","new","","","","pause","","","resolve","","","revert","revoke_role","","","schema","schema_entrypoints","schema_errors","","schema_events","schema_types","","serialized_length","set_grace_period","","","to_bytes","token_id","try_admin_burn","try_admin_prolong","try_admin_prolong_and_register","try_admin_register","try_admin_transfer","try_controller_prolong","try_controller_prolong_and_register","try_controller_register","try_deploy","try_deploy_with_cfg","try_expire","try_from","","","","","","try_grace_period","try_grant_role","try_has_role","try_init","try_into","","","","","","try_is_paused","try_pause","try_resolve","try_revoke_role","try_set_grace_period","try_unpause","ty","type_id","","","","","","unpause","","","unwrap","vzip","","","","","","with_tokens","","DefaultResolver","DefaultResolverContractRef","DefaultResolverHostRef","DefaultResolverInitArgs","InvalidDomain","InvalidSubdomainFormat","InvalidTokenName","NameTokenAddressChanged","ResolutionChanged","ResolutionCleared","ResolutionSetByInvalidOwner","ResolutionSetWithInvalidToken","ResolverContractRef","ResolverError","ResolverHostRef","UnauthorizedInvalidation","UnauthorizedTokenAddressUpdate","address","","","","borrow","","","","","","","","","","borrow_mut","","","","","","","","","","cl_type","","","","","","contract_address","","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","","eq","","","event_schemas","events","fmt","","","from","","","","","","","","","","from_bytes","","","get_event","","grant_role","","","has_role","","","ident","","init","","","","","insert_runtime_arg","","","into","","","","","","","","","","","into_event","","","invalidate_resolutions","","","","","is_required","","","last_call","","load","name","","","name_token","new","","","","","","","","resolve","","","","","revert","revoke_role","","","schema","","","schema_entrypoints","schema_errors","","schema_events","schema_types","","","","serialized_length","","","set_name_token","","","","","set_resolution","","","","","to_bytes","","","token_id","try_deploy","try_deploy_with_cfg","try_from","","","","","","","","","","try_grant_role","try_has_role","try_init","","try_into","","","","","","","","","","try_invalidate_resolutions","","try_resolve","","try_revoke_role","try_set_name_token","","try_set_resolution","","ty","","","type_id","","","","","","","","","","unwrap","","","vzip","","","","","","","","","","with_tokens","","","","PrimaryNameChanged","ReverseResolver","ReverseResolverContractRef","ReverseResolverHostRef","ReverseResolverInitArgs","address","","","borrow","","","","","borrow_mut","","","","","cl_type","","contract_address","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","eq","event_schemas","events","fmt","from","","","","","from_bytes","get_event","get_primary_name","","","ident","","init","","","insert_runtime_arg","into","","","","","","into_event","is_required","last_call","load","name","name_token","new","","","","new_primary_name","old_primary_name","revert","schema","schema_entrypoints","schema_errors","schema_events","schema_types","","serialized_length","set_primary_name","","","to_bytes","token_id","try_deploy","try_deploy_with_cfg","try_from","","","","","try_get_primary_name","try_init","try_into","","","","","try_set_primary_name","ty","type_id","","","","","unwrap","vzip","","","","","with_tokens","","ToTokenId","token_id","DeserializationError","EmptyLabel","EmptyTLD","ExpirableVoucher","InvalidMetadata","NameMintInfo","NameTokenError","NameTokenMetadata","NameTransferInfo","PastExpirationDate","Payment","PaymentInfo","PaymentVoucher","RenewalPaymentVoucher","RenewalVoucher","SLDDoesNotExist","SecondarySaleVoucher","SerializationError","TLDNotSupported","TokenRenewalInfo","TokenizationVoucher","__clone_box","","","","","","","","","","amount","asset_uri","borrow","","","","","","","","","","","borrow_mut","","","","","","","","","","","buyer","cl_type","","","","","","","","","","","","","","","","","","clear_resolver","clone","","","","","","","","","","clone_into","","","","","","","","","","clone_to_uninit","","","","","","","","","","deserialize","eq","","","","","","","","","","event_schemas","","","","","","","","","events","","","","","","","","","expiration","expiration_time","","","fmt","","","","","","","","","","","from","","","","","","","","","","","","","from_bytes","","","","","","","","","insert_runtime_arg","","","","","","","","","into","","","","","","","","","","","is_required","","","","","","","","","json","label","","names","","","new","","","","","","owner","","payment","","","payment_id","payment_info","","","","resolver","schema_errors","schema_types","","","","","","","","","serialize","serialized_length","","","","","","","","","set_expiration","set_resolver","to_bytes","","","","","","","","","to_owned","","","","","","","","","","to_vec","token_expiration","","token_id","tokens","","try_from","","","","","","","","","","","","","try_into","","","","","","","","","","","ty","","","","","","","","","type_id","","","","","","","","","","","unwrap","","","","","","","","","voucher_expiration","","","","","vzip","","","","","","","","","","","with_no_resolver","with_resolver"],"q":[[0,"casper_name_contracts"],[2,"casper_name_contracts::contracts"],[9,"casper_name_contracts::contracts::controller"],[311,"casper_name_contracts::contracts::marketplace"],[425,"casper_name_contracts::contracts::name_token"],[641,"casper_name_contracts::contracts::registrar"],[829,"casper_name_contracts::contracts::resolver"],[1064,"casper_name_contracts::contracts::reverse_resolver"],[1172,"casper_name_contracts::contracts::token_id"],[1174,"casper_name_contracts::data_structures"],[1515,"odra_core::address"],[1516,"casper_types::bytesrepr::bytes"],[1517,"casper_name_contracts::contracts::controller::__controller_test_parts"],[1518,"casper_types::cl_type"],[1519,"casper_name_contracts::contracts::controller::__base_controller_test_parts"],[1520,"casper_contract_schema"],[1521,"core::option"],[1522,"alloc::vec"],[1523,"odra_core::host"],[1524,"odra_core::entry_point_callback"],[1525,"odra_core::contract_def"],[1526,"odra_core::contract_env"],[1527,"alloc::rc"],[1528,"alloc::string"],[1529,"casper_event_standard::schema"],[1530,"alloc::collections::btree::map"],[1531,"core::fmt"],[1532,"casper_types::bytesrepr"],[1533,"core::result"],[1534,"odra_core::error"],[1535,"casper_event_standard"],[1536,"odra_modules::access::access_control"],[1537,"casper_types::crypto::asymmetric_key"],[1538,"casper_types::transaction::runtime_args"],[1539,"odra_core::call_result"],[1540,"casper_types::uint::macro_code"],[1541,"core::convert"],[1542,"casper_contract_schema::ty"],[1543,"core::any"],[1544,"casper_name_contracts::contracts::marketplace::__secondary_market_test_parts"],[1545,"casper_name_contracts::contracts::name_token::__name_token_test_parts"],[1546,"casper_name_contracts::contracts::registrar::__registrar_test_parts"],[1547,"casper_name_contracts::contracts::resolver::__resolver_test_parts"],[1548,"casper_name_contracts::contracts::resolver::__default_resolver_test_parts"],[1549,"casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts"],[1550,"dyn_clone::sealed"],[1551,"serde::de"],[1552,"serde::ser"]],"i":"````````````Mb0`````000`00``bAdhAjC`CdCfl76EnBn76:5432981076:298298554433862020208620280654320205435432981076:543862980762980762806298054354329811076:5432980765438620543543298076298001298076298202980765432020:205432054329802980129805432018820205432981076:868685432981076:8688688688885435432981076:29805435432981076:9876````GnHdH`21Hf13201322111211211132021321321213213200132210132132113211111321320132102111320222132022222221320132132032Md000`````000HhHjHl10210210210210210210210I`432104321133313313332104321132132131321321004321321130321321032132132132133213213213213343332132132132103213321321321111111113332104111132104111111111111111111113210432104321213`Mf`000`````0000IdIhIf21021021021021Jb132Jd5124305113243243243222322312224311243051324324324323243112430051243132101243243243224312252121243123333333322312430533331243053333331124305243112430543````Mh00```00```00JfJjJhJl32K`KbKdJn54Kf9874321650944332275111517154321143287432165094327516516515871654328743216500943287165432751432087432165871651165432119143214328716587165432111874321650955758743216509757557575432874321650943287432165098765`````KhKjKnKl32L`214302223111311321121430223143131432143002223120143222121111221432111143023314302321430221430243`LbLn00`0````0`````0`00``IbLfJ`nHbLhIlIjAfIn83:9876543210:987654321088877665544332211009987654321098765432109876543210998765432108765432108765432109Ll81;:987654321;:98876543211987654321987654321;:987654321987654321:54876874321547629Fd873;<:98765432;:98765432;;:98765432;:98765432;54432<;;;:98765432<;:98765432:98765432<;:98765432:9876543298732<;:98765432;;","f":"```````````````````````````{{{d{b}}}{{d{f}}}}{df}{{{d{h}}}{{d{f}}}}1{d{{d{c}}}{}}0000000000{{{d{j}}}{{d{jc}}}{}}0000000000{{{d{jl}}nA`}Ab}{{{d{jb}}nA`}Ab}{{{d{jAd}}nA`}Ab}{{{d{jl}}nA`AfA`}Ab}{{{d{jb}}nA`AfA`}Ab}{{{d{jAd}}nA`AfA`}Ab}{{}Ah}00000{{{d{Ad}}}f}{{{d{Aj}}}f}{{}{{B`{{An{Al}}}}}}0{{{d{Bb}}}}0{{{d{Bb}}c}{}Bd}0{{{d{Bb}}}Bf}0{{}{{B`{Bh}}}}0{{{d{l}}}{{Bl{Bj}}}}{{{d{Ad}}}{{d{Bb}}}}{{{d{Bn}}}{{Bl{Bj}}}}{{{d{Aj}}}{{d{Bb}}}}{{{d{C`}}{d{C`}}}Cb}{{{d{Cd}}{d{Cd}}}Cb}{{{d{Cf}}{d{Cf}}}Cb}{{}{{Cl{ChCj}}}}0{{}{{B`{Cn}}}}0{{{d{C`}}{d{jD`}}}Db}{{{d{Cd}}{d{jD`}}}Db}{{{d{Cf}}{d{jD`}}}Db}{cc{}}0000000000{{{d{{Df{Dd}}}}}{{Dl{{Dh{C`{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Cd{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Cf{d{{Df{Dd}}}}}}Dj}}}}{{{d{Ad}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{Aj}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{jl}}{d{Ef}}{d{f}}}Ab}{{{d{jb}}{d{Ef}}{d{f}}}Ab}{{{d{jAd}}{d{Ef}}{d{f}}}Ab}{{{d{jBn}}{d{Ef}}{d{f}}}Ab}{{{d{jh}}{d{Ef}}{d{f}}}Ab}{{{d{jAj}}{d{Ef}}{d{f}}}Ab}{{{d{l}}{d{Ef}}{d{f}}}Cb}{{{d{b}}{d{Ef}}{d{f}}}Cb}{{{d{Ad}}{d{Ef}}{d{f}}}Cb}{{{d{Bn}}{d{Ef}}{d{f}}}Cb}{{{d{h}}{d{Ef}}{d{f}}}Cb}{{{d{Aj}}{d{Ef}}{d{f}}}Cb}{{}Ch}000{{{d{jl}}fEhf}Ab}{{{d{jb}}fEhf}Ab}{{{d{jAd}}fEhf}Ab}{{{d{jBn}}Ehf}Ab}{{{d{Ej}}{d{jEl}}}Ab}00{{}c{}}000000{EnEl}1111{{}Cn}00{{{d{l}}}Cb}{{{d{b}}}Cb}{{{d{Ad}}}Cb}{{{d{Bn}}}Cb}{{{d{h}}}Cb}{{{d{Aj}}}Cb}{{}Cb}00{{{d{Ad}}}F`}{{{d{Aj}}}F`}{{{d{Bb}}f}}0{{}Ch}00{{ChfFb}C`}{EhCd}{fCf}{{{Bl{Bj}}}l}{{{Bl{Bj}}f}b}{{fBb}Ad}{{{Bl{Bj}}}Bn}{{{Bl{Bj}}f}h}{{fBb}Aj}{{{d{jl}}}Ab}{{{d{jb}}}Ab}{{{d{jAd}}}Ab}{{{d{jBn}}}Ab}{{{d{Bn}}{d{c}}A`}Ab{FdFf}}`{{{d{jl}}AfA`}Ab}{{{d{jb}}AfA`}Ab}{{{d{jAd}}AfA`}Ab}{{{d{Bn}}}Ab}{{{d{h}}}Ab}{{{d{Aj}}}Ab}{{{d{l}}Ch}{{An{f}}}}{{{d{b}}Ch}{{An{f}}}}{{{d{Ad}}Ch}{{An{f}}}}{{dc}Fh{{Fl{Fj}}}}0{{{d{jl}}{d{Ef}}{d{f}}}Ab}{{{d{jb}}{d{Ef}}{d{f}}}Ab}{{{d{jAd}}{d{Ef}}{d{f}}}Ab}{{{d{jBn}}{d{Ef}}{d{f}}}Ab}{{{d{jh}}{d{Ef}}{d{f}}}Ab}{{{d{jAj}}{d{Ef}}{d{f}}}Ab}{{}Cj}00{{}{{B`{Fn}}}}0{{}{{B`{G`}}}}00{{}{{B`{Gb}}}}0{{}{{B`{{An{Al}}}}}}0000{{{d{C`}}}Gd}{{{d{Cd}}}Gd}{{{d{Cf}}}Gd}{{{d{jl}}Eh}Ab}{{{d{jb}}Eh}Ab}{{{d{jAd}}Eh}Ab}{{{d{jBn}}Eh}Ab}{{{d{jl}}f}Ab}{{{d{jb}}f}Ab}{{{d{jAd}}f}Ab}{{{d{jBn}}f}Ab}`{{{d{l}}}Eh}{{{d{b}}}Eh}{{{d{Ad}}}Eh}{{{d{Bn}}}Eh}{{{d{C`}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Cd}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Cf}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}0`{{{d{jAd}}nA`}{{Gh{Ab}}}}{{{d{jAd}}nA`AfA`}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}0{{{d{Bb}}c}{{Dl{Fj}}}Bd}0{c{{Dl{e}}}{}{}}0000000000{{{d{jAd}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{jAj}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Ad}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{Aj}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jAd}}fEhf}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}0000000000{{{d{Ad}}}{{Gh{Cb}}}}{{{d{Aj}}}{{Gh{Cb}}}}{{{d{jAd}}}{{Gh{Ab}}}}{{{d{jAd}}AfA`}{{Gh{Ab}}}}{{{d{Aj}}}{{Gh{Ab}}}}{{{d{Ad}}Ch}{{Gh{{An{f}}}}}};:{{{d{jAd}}Eh}{{Gh{Ab}}}}{{{d{jAd}}f}{{Gh{Ab}}}}{{{d{Ad}}}{{Gh{Eh}}}}6{{}Gj}00{dGl}0000000000{{{d{jl}}}Ab}{{{d{jb}}}Ab}{{{d{jAd}}}Ab}{{{d{jBn}}}Ab}{{{An{c}}{d{Bj}}}c{}}00{{}c{}}0000000000{{{d{b}}Fb}b}{{{d{Ad}}Fb}Ad}{{{d{h}}Fb}h}{{{d{Aj}}Fb}Aj}````{{{d{Gn}}}{{d{f}}}}{df}{d{{d{c}}}{}}000{{{d{j}}}{{d{jc}}}{}}000{{{d{jH`}}HbA`}Ab}{{{d{jGn}}HbA`}Ab}{{{d{jHd}}HbA`}Ab}{{{d{Hd}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{H`}}}{{Bl{Bj}}}}{{{d{Hd}}}{{d{Bb}}}}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{cc{}}000{{{d{Hd}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{jH`}}{d{Ef}}{d{f}}}Ab}{{{d{jGn}}{d{Ef}}{d{f}}}Ab}{{{d{jHd}}{d{Ef}}{d{f}}}Ab}{{{d{H`}}{d{Ef}}{d{f}}}Cb}{{{d{Gn}}{d{Ef}}{d{f}}}Cb}{{{d{Hd}}{d{Ef}}{d{f}}}Cb}{{}Ch}0{{{d{jH`}}Ehff}Ab}{{{d{jGn}}Ehff}Ab}{{{d{jHd}}Ehff}Ab}{{}c{}}00{HfEl}1{{{d{H`}}}Cb}{{{d{Gn}}}Cb}{{{d{Hd}}}Cb}{{{d{Hd}}}F`}{{{d{Bb}}f}}`{{{Bl{Bj}}}H`}{{{Bl{Bj}}f}Gn}{{fBb}Hd}{{{d{jH`}}}Ab}{{{d{jGn}}}Ab}{{{d{jHd}}}Ab}{{dc}Fh{{Fl{Fj}}}}{{{d{jH`}}{d{Ef}}{d{f}}}Ab}{{{d{jGn}}{d{Ef}}{d{f}}}Ab}{{{d{jHd}}{d{Ef}}{d{f}}}Ab}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}{{{d{jH`}}Eh}Ab}{{{d{jGn}}Eh}Ab}{{{d{jHd}}Eh}Ab}{{{d{jH`}}f}Ab}{{{d{jGn}}f}Ab}{{{d{jHd}}f}Ab}`{{{d{H`}}}Eh}{{{d{Gn}}}Eh}{{{d{Hd}}}Eh}{{dCh}Gf}`{{{d{jHd}}HbA`}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}000{{{d{jHd}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Hd}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jHd}}Ehff}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}000{{{d{Hd}}}{{Gh{Cb}}}}{{{d{jHd}}}{{Gh{Ab}}}}5{{{d{jHd}}Eh}{{Gh{Ab}}}}{{{d{jHd}}f}{{Gh{Ab}}}}{{{d{Hd}}}{{Gh{Eh}}}}3{dGl}000{{{d{jH`}}}Ab}{{{d{jGn}}}Ab}{{{d{jHd}}}Ab}{{}c{}}000{{{d{Gn}}Fb}Gn}{{{d{Hd}}Fb}Hd}````````````{{{d{jHh}}}Ab}{{{d{jHj}}}Ab}{{{d{jHl}}}Ab}{{{d{Hj}}}{{d{f}}}}{df}{{{d{jHh}}f{B`{Gf}}}Ab}{{{d{jHj}}f{B`{Gf}}}Ab}{{{d{jHl}}f{B`{Gf}}}Ab}{{{d{jHh}}fGf}Ab}{{{d{jHj}}fGf}Ab}{{{d{jHl}}fGf}Ab}{{{d{jHh}}f}Ab}{{{d{jHj}}f}Ab}{{{d{jHl}}f}Ab}{{{d{Hh}}Gf}{{An{f}}}}{{{d{Hj}}Gf}{{An{f}}}}{{{d{Hl}}Gf}{{An{f}}}}{{{d{Hh}}Gff}Ab}{{{d{Hj}}Gff}Ab}{{{d{Hl}}Gff}Ab}{{{d{Hh}}f}Gf}{{{d{Hj}}f}Gf}{{{d{Hl}}f}Gf}{d{{d{c}}}{}}0000{{{d{j}}}{{d{jc}}}{}}0000{{{d{jHh}}Gf}Ab}{{{d{jHj}}Gf}Ab}{{{d{jHl}}Gf}Ab}{{{d{Hl}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{Hh}}}{{Bl{Bj}}}}{{{d{Hl}}}{{d{Bb}}}}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{cc{}}0000{{{d{Hh}}}f}{{{d{Hj}}}f}<{{{d{Hl}}Dn}{{Dl{cE`}}}{EbEd}}21={{{d{Hh}}}{{An{f}}}}{{{d{Hj}}}{{An{f}}}}{{{d{Hl}}}{{An{f}}}}{{}Ch}0{{{d{jHh}}ChChHn}Ab}{{{d{jHj}}ChChHn}Ab}{{{d{jHl}}ChChHn}Ab}{{}c{}}00{I`El}11{{{d{Hh}}ff}Cb}{{{d{Hj}}ff}Cb}{{{d{Hl}}ff}Cb}{{{d{Hh}}Gf}Cb}{{{d{Hj}}Gf}Cb}{{{d{Hl}}Gf}Cb}{{{d{Hl}}}F`}{{{d{Bb}}f}}`{{{d{jHh}}fGf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHj}}fGf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHl}}fGf{B`{{Dh{ChCh}}}}}Ab}{{{d{Hh}}}Ch}{{{d{Hj}}}Ch}{{{d{Hl}}}Ch}`{{{Bl{Bj}}}Hh}{{{Bl{Bj}}f}Hj}{{fBb}Hl}{{{d{Hh}}Gf}{{An{f}}}}{{{d{Hj}}Gf}{{An{f}}}}{{{d{Hl}}Gf}{{An{f}}}}{{{d{jHh}}}Ab}{{{d{jHj}}}Ab}{{{d{jHl}}}Ab}543{{dc}Fh{{Fl{Fj}}}}{{{d{jHh}}Gf}Ab}{{{d{jHj}}Gf}Ab}{{{d{jHl}}Gf}Ab}{{{d{jHh}}f}Ab}{{{d{jHj}}f}Ab}{{{d{jHl}}f}Ab}210{{{d{jHh}}ffGf{An{A`}}}Ab}{{{d{jHj}}ffGf{An{A`}}}Ab}{{{d{jHl}}ffGf{An{A`}}}Ab}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}0{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}987{{{d{jHh}}Gff}Ab}{{{d{jHj}}Gff}Ab}{{{d{jHl}}Gff}Ab}{{{d{jHh}}Gf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHj}}Gf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHl}}Gf{B`{{Dh{ChCh}}}}}Ab}{{{d{Hh}}}Ch}{{{d{Hj}}}Ch}{{{d{Hl}}}Ch}`{{{d{Hh}}Gf}Cb}{{{d{Hj}}Gf}Cb}{{{d{Hl}}Gf}Cb}{{dCh}Gf}{{{d{Hh}}Gf}{{B`{{Dh{ChCh}}}}}}{{{d{Hj}}Gf}{{B`{{Dh{ChCh}}}}}}{{{d{Hl}}Gf}{{B`{{Dh{ChCh}}}}}}{{{d{jHh}}ffGf}Ab}{{{d{jHj}}ffGf}Ab}{{{d{jHl}}ffGf}Ab}{{{d{jHh}}{d{f}}}Ab}{{{d{jHj}}{d{f}}}Ab}{{{d{jHl}}{d{f}}}Ab}{{{d{jHl}}}{{Gh{Ab}}}}{{{d{jHl}}f{B`{Gf}}}{{Gh{Ab}}}}{{{d{jHl}}fGf}{{Gh{Ab}}}}{{{d{jHl}}f}{{Gh{Ab}}}}{{{d{Hl}}Gf}{{Gh{{An{f}}}}}}{{{d{Hl}}Gff}{{Gh{Ab}}}}{{{d{Hl}}f}{{Gh{Gf}}}}{{{d{jHl}}Gf}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}0000{{{d{Hl}}}{{Gh{f}}}}0{{{d{Hl}}}{{Gh{{An{f}}}}}}{{{d{jHl}}ChChHn}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}0000{{{d{Hl}}ff}{{Gh{Cb}}}}{{{d{Hl}}Gf}{{Gh{Cb}}}}{{{d{jHl}}fGf{B`{{Dh{ChCh}}}}}{{Gh{Ab}}}}{{{d{Hl}}}{{Gh{Ch}}}}>{{{d{jHl}}}{{Gh{Ab}}}}?<{{{d{jHl}}f}{{Gh{Ab}}}}0{{{d{jHl}}ffGf{An{A`}}}{{Gh{Ab}}}}1{{{d{jHl}}Gff}{{Gh{Ab}}}}{{{d{jHl}}Gf{B`{{Dh{ChCh}}}}}{{Gh{Ab}}}}57{{{d{Hl}}Gf}{{Gh{{B`{{Dh{ChCh}}}}}}}}{{{d{jHl}}ffGf}{{Gh{Ab}}}}{{{d{jHl}}{d{f}}}{{Gh{Ab}}}}6{dGl}0000{{}c{}}0000{{{d{jHh}}f}Ab}{{{d{jHj}}f}Ab}{{{d{jHl}}f}Ab}{{{d{Hj}}Fb}Hj}{{{d{Hl}}Fb}Hl}{{{d{Hh}}Gf}Ib}```````````````{{{d{Id}}}{{d{f}}}}{df}{{{d{jIf}}{B`{Gf}}}Ab}{{{d{jId}}{B`{Gf}}}Ab}{{{d{jIh}}{B`{Gf}}}Ab}{{{d{jIf}}{B`{Ij}}}Ab}{{{d{jId}}{B`{Ij}}}Ab}{{{d{jIh}}{B`{Ij}}}Ab}{{{d{jIf}}{B`{Ij}}{B`{Il}}}Ab}{{{d{jId}}{B`{Ij}}{B`{Il}}}Ab}{{{d{jIh}}{B`{Ij}}{B`{Il}}}Ab}{{{d{jIf}}{B`{Il}}}Ab}{{{d{jId}}{B`{Il}}}Ab}{{{d{jIh}}{B`{Il}}}Ab}{{{d{jIf}}f{B`{Gf}}}Ab}{{{d{jId}}f{B`{Gf}}}Ab}{{{d{jIh}}f{B`{Gf}}}Ab}{d{{d{c}}}{}}00000{{{d{j}}}{{d{jc}}}{}}00000{{}Ah}0{{{d{Ih}}}f}{{{d{jIf}}In}Ab}{{{d{jId}}In}Ab}{{{d{jIh}}In}Ab}{{{d{jIf}}InJ`}Ab}{{{d{jId}}InJ`}Ab}{{{d{jIh}}InJ`}Ab}{{{d{jIf}}J`}Ab}{{{d{jId}}J`}Ab}{{{d{jIh}}J`}Ab}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{If}}}{{Bl{Bj}}}}{{{d{Ih}}}{{d{Bb}}}}{{{d{Jb}}{d{Jb}}}Cb}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{{{d{jIf}}{B`{Gf}}}Ab}{{{d{jId}}{B`{Gf}}}Ab}{{{d{jIh}}{B`{Gf}}}Ab}{{{d{Jb}}{d{jD`}}}Db}{cc{}}00000{{{d{{Df{Dd}}}}}{{Dl{{Dh{Jb{d{{Df{Dd}}}}}}Dj}}}}{{{d{Ih}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{If}}}Hn}{{{d{Id}}}Hn}{{{d{Ih}}}Hn}{{{d{jIf}}{d{Ef}}{d{f}}}Ab}{{{d{jId}}{d{Ef}}{d{f}}}Ab}{{{d{jIh}}{d{Ef}}{d{f}}}Ab}{{{d{If}}{d{Ef}}{d{f}}}Cb}{{{d{Id}}{d{Ef}}{d{f}}}Cb}{{{d{Ih}}{d{Ef}}{d{f}}}Cb}{{}Ch}0{{{d{jIf}}f}Ab}{{{d{jId}}f}Ab}{{{d{jIh}}f}Ab}{{{d{Ej}}{d{jEl}}}Ab}{{}c{}}0000{JdEl}1{{}Cn}{{{d{If}}}Cb}{{{d{Id}}}Cb}{{{d{Ih}}}Cb}{{}Cb}{{{d{Ih}}}F`}{{{d{Bb}}f}}=`{HnJb}{{{Bl{Bj}}}If}{{{Bl{Bj}}f}Id}{{fBb}Ih}{{{d{jIf}}}Ab}{{{d{jId}}}Ab}{{{d{jIh}}}Ab}{{{d{If}}Ch}{{An{f}}}}{{{d{Id}}Ch}{{An{f}}}}{{{d{Ih}}Ch}{{An{f}}}}{{dc}Fh{{Fl{Fj}}}}{{{d{jIf}}{d{Ef}}{d{f}}}Ab}{{{d{jId}}{d{Ef}}{d{f}}}Ab}{{{d{jIh}}{d{Ef}}{d{f}}}Ab}{{}Cj}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}0{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}0{{{d{Jb}}}Gd}{{{d{jIf}}Hn}Ab}{{{d{jId}}Hn}Ab}{{{d{jIh}}Hn}Ab}{{{d{Jb}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}{{{d{jIh}}{B`{Gf}}}{{Gh{Ab}}}}{{{d{jIh}}{B`{Ij}}}{{Gh{Ab}}}}{{{d{jIh}}{B`{Ij}}{B`{Il}}}{{Gh{Ab}}}}{{{d{jIh}}{B`{Il}}}{{Gh{Ab}}}}{{{d{jIh}}f{B`{Gf}}}{{Gh{Ab}}}}{{{d{jIh}}In}{{Gh{Ab}}}}{{{d{jIh}}InJ`}{{Gh{Ab}}}}{{{d{jIh}}J`}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}9{c{{Dl{e}}}{}{}}00000{{{d{Ih}}}{{Gh{Hn}}}}{{{d{jIh}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Ih}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jIh}}f}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}00000{{{d{Ih}}}{{Gh{Cb}}}}{{{d{jIh}}}{{Gh{Ab}}}}{{{d{Ih}}Ch}{{Gh{{An{f}}}}}}6{{{d{jIh}}Hn}{{Gh{Ab}}}}2{{}Gj}{dGl}00000{{{d{jIf}}}Ab}{{{d{jId}}}Ab}{{{d{jIh}}}Ab}{{{An{c}}{d{Bj}}}c{}}{{}c{}}00000{{{d{Id}}Fb}Id}{{{d{Ih}}Fb}Ih}`````````````````{{{d{Jf}}}{{d{f}}}}{df}{{{d{Jh}}}{{d{f}}}}1{d{{d{c}}}{}}000000000{{{d{j}}}{{d{jc}}}{}}000000000{{}Ah}00000{{{d{Jj}}}f}{{{d{Jl}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{Jj}}}{{d{Bb}}}}{{{d{Jn}}}{{Bl{Bj}}}}{{{d{Jl}}}{{d{Bb}}}}{{{d{K`}}{d{K`}}}Cb}{{{d{Kb}}{d{Kb}}}Cb}{{{d{Kd}}{d{Kd}}}Cb}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{{{d{K`}}{d{jD`}}}Db}{{{d{Kb}}{d{jD`}}}Db}{{{d{Kd}}{d{jD`}}}Db}{cc{}}000000000{{{d{{Df{Dd}}}}}{{Dl{{Dh{K`{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Kb{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Kd{d{{Df{Dd}}}}}}Dj}}}}{{{d{Jj}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{Jl}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{jJn}}{d{Ef}}{d{f}}}Ab}{{{d{jJh}}{d{Ef}}{d{f}}}Ab}{{{d{jJl}}{d{Ef}}{d{f}}}Ab}{{{d{Jn}}{d{Ef}}{d{f}}}Cb}{{{d{Jh}}{d{Ef}}{d{f}}}Cb}{{{d{Jl}}{d{Ef}}{d{f}}}Cb}{{}Ch}0{{{d{jJf}}f}Ab}{{{d{jJj}}f}Ab}{{{d{jJn}}f}Ab}{{{d{jJh}}f}Ab}{{{d{jJl}}f}Ab}{{{d{Ej}}{d{jEl}}}Ab}00{{}c{}}00000000{KfEl}1{{}Cn}00{{{d{jJf}}Gf}Ab}{{{d{jJj}}Gf}Ab}{{{d{jJn}}Gf}Ab}{{{d{jJh}}Gf}Ab}{{{d{jJl}}Gf}Ab}{{}Cb}00{{{d{Jj}}}F`}{{{d{Jl}}}F`}{{{d{Bb}}f}}{{}Ch}00`{{{Bl{Bj}}f}Jf}{{fBb}Jj}{{Ch{An{f}}}K`}{GfKb}{fKd}{{{Bl{Bj}}}Jn}{{{Bl{Bj}}f}Jh}{{fBb}Jl}{{{d{Jf}}Ch}{{An{f}}}}{{{d{Jj}}Ch}{{An{f}}}}{{{d{Jn}}Ch}{{An{f}}}}{{{d{Jh}}Ch}{{An{f}}}}{{{d{Jl}}Ch}{{An{f}}}}{{dc}Fh{{Fl{Fj}}}}{{{d{jJn}}{d{Ef}}{d{f}}}Ab}{{{d{jJh}}{d{Ef}}{d{f}}}Ab}{{{d{jJl}}{d{Ef}}{d{f}}}Ab}{{}Cj}00{{}{{B`{Fn}}}}{{}{{B`{G`}}}}0{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}000{{{d{K`}}}Gd}{{{d{Kb}}}Gd}{{{d{Kd}}}Gd}{{{d{jJf}}f}Ab}{{{d{jJj}}f}Ab}{{{d{jJn}}f}Ab}{{{d{jJh}}f}Ab}{{{d{jJl}}f}Ab}{{{d{jJf}}Ch{An{f}}}Ab}{{{d{jJj}}Ch{An{f}}}Ab}{{{d{jJn}}Ch{An{f}}}Ab}{{{d{jJh}}Ch{An{f}}}Ab}{{{d{jJl}}Ch{An{f}}}Ab}{{{d{K`}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Kb}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Kd}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}000000000{{{d{jJl}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Jl}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jJj}}f}{{Gh{Ab}}}}{{{d{jJl}}f}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}000000000{{{d{jJj}}Gf}{{Gh{Ab}}}}{{{d{jJl}}Gf}{{Gh{Ab}}}}{{{d{Jj}}Ch}{{Gh{{An{f}}}}}}{{{d{Jl}}Ch}{{Gh{{An{f}}}}}}865{{{d{jJj}}Ch{An{f}}}{{Gh{Ab}}}}{{{d{jJl}}Ch{An{f}}}{{Gh{Ab}}}}{{}Gj}00{dGl}000000000{{{An{c}}{d{Bj}}}c{}}00{{}c{}}000000000{{{d{Jf}}Fb}Jf}{{{d{Jj}}Fb}Jj}{{{d{Jh}}Fb}Jh}{{{d{Jl}}Fb}Jl}`````{{{d{Kh}}}{{d{f}}}}{df}`{d{{d{c}}}{}}0000{{{d{j}}}{{d{jc}}}{}}0000{{}Ah}0{{{d{Kj}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{Kl}}}{{Bl{Bj}}}}{{{d{Kj}}}{{d{Bb}}}}{{{d{Kn}}{d{Kn}}}Cb}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{{{d{Kn}}{d{jD`}}}Db}{cc{}}0000{{{d{{Df{Dd}}}}}{{Dl{{Dh{Kn{d{{Df{Dd}}}}}}Dj}}}}{{{d{Kj}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{Kl}}{d{f}}}{{An{Ch}}}}{{{d{Kh}}{d{f}}}{{An{Ch}}}}{{{d{Kj}}{d{f}}}{{An{Ch}}}}{{}Ch}0{{{d{jKl}}f}Ab}{{{d{jKh}}f}Ab}{{{d{jKj}}f}Ab}{{{d{Ej}}{d{jEl}}}Ab}{{}c{}}00{L`El}11{{}Cn}{{}Cb}{{{d{Kj}}}F`}{{{d{Bb}}f}}:`{{{Bl{Bj}}}Kl}{{{Bl{Bj}}f}Kh}{{fBb}Kj}{{f{An{Ch}}{An{Ch}}}Kn}``{{dc}Fh{{Fl{Fj}}}}{{}Cj}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}0{{{d{Kn}}}Gd}{{{d{jKl}}Ch}Ab}{{{d{jKh}}Ch}Ab}{{{d{jKj}}Ch}Ab}{{{d{Kn}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}0000{{{d{Kj}}{d{f}}}{{Gh{{An{Ch}}}}}}{{{d{jKj}}f}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}0000{{{d{jKj}}Ch}{{Gh{Ab}}}}{{}Gj}{dGl}0000{{{An{c}}{d{Bj}}}c{}}{{}c{}}0000{{{d{Kh}}Fb}Kh}{{{d{Kj}}Fb}Kj}`{{{d{Lb}}Ch}Gf}`````````````````````{{dLd}Ab}000000000``{d{{d{c}}}{}}0000000000{{{d{j}}}{{d{jc}}}{}}0000000000`{{}Ah}00000000000000000{{{d{jIb}}}Ab}{{{d{Ib}}}Ib}{{{d{Lf}}}Lf}{{{d{J`}}}J`}{{{d{n}}}n}{{{d{Hb}}}Hb}{{{d{Lh}}}Lh}{{{d{Il}}}Il}{{{d{Ij}}}Ij}{{{d{Af}}}Af}{{{d{In}}}In}{{d{d{jc}}}Ab{}}000000000{{dDd}Ab}000000000{c{{Dl{Ib}}}Lj}{{{d{Ib}}{d{Ib}}}Cb}{{{d{Lf}}{d{Lf}}}Cb}{{{d{J`}}{d{J`}}}Cb}{{{d{n}}{d{n}}}Cb}{{{d{Hb}}{d{Hb}}}Cb}{{{d{Lh}}{d{Lh}}}Cb}{{{d{Il}}{d{Il}}}Cb}{{{d{Ij}}{d{Ij}}}Cb}{{{d{Af}}{d{Af}}}Cb}{{{d{In}}{d{In}}}Cb}{{}{{Cl{ChCj}}}}00000000{{}{{B`{Cn}}}}00000000{{{d{Ib}}}Hn}{{{d{Ll}}}Hn}{{{d{J`}}}Hn}{{{d{In}}}Hn}{{{d{Ln}}{d{jD`}}}Db}{{{d{Ib}}{d{jD`}}}Db}{{{d{Lf}}{d{jD`}}}Db}{{{d{J`}}{d{jD`}}}Db}{{{d{n}}{d{jD`}}}Db}{{{d{Hb}}{d{jD`}}}Db}{{{d{Lh}}{d{jD`}}}Db}{{{d{Il}}{d{jD`}}}Db}{{{d{Ij}}{d{jD`}}}Db}{{{d{Af}}{d{jD`}}}Db}{{{d{In}}{d{jD`}}}Db}{cc{}}00{nJ`}11111111{AfIn}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Lf{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{J`{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{n{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Hb{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Lh{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Il{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Ij{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Af{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{In{d{{Df{Dd}}}}}}Dj}}}}{{{d{Ej}}{d{jEl}}}Ab}00000000{{}c{}}0000000000{{}Cb}00000000{{{d{Ib}}}Ch}`````{{{B`{Il}}Hn}J`}{{Fb{d{Ej}}f{B`{Il}}Hn}n}{{{d{Ej}}fHn{d{Ej}}}Il}{{GfHn}Ij}{{Fb{d{Ej}}f{B`{Ij}}Hn}Af}{{{B`{Ij}}Hn}In}``````{{{d{Fd}}}{{d{Lf}}}}{{{d{n}}}{{d{Lf}}}}{{{d{Hb}}}{{d{Lf}}}}{{{d{Af}}}{{d{Lf}}}}{{{d{Ib}}}{{Gh{{An{f}}}}}}{{}{{B`{G`}}}}{{}{{B`{{An{Al}}}}}}00000000{{{d{Ib}}c}DlM`}{{{d{Lf}}}Gd}{{{d{J`}}}Gd}{{{d{n}}}Gd}{{{d{Hb}}}Gd}{{{d{Lh}}}Gd}{{{d{Il}}}Gd}{{{d{Ij}}}Gd}{{{d{Af}}}Gd}{{{d{In}}}Gd}{{{d{jIb}}Hn}Ab}{{{d{jIb}}f}Ab}{{{d{Lf}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{J`}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{n}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Hb}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Lh}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Il}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Ij}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Af}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{In}}}{{Dl{{B`{Dd}}Dj}}}}{dc{}}000000000{{{d{Ib}}}{{B`{{Dh{ChCh}}}}}}`````{c{{Dl{e}}}{}{}}0{{{B`{{Dh{ChCh}}}}}{{Dl{Ibc}}}{}}{Ch{{Dl{Ibc}}}{}}222222222{{}{{Dl{c}}}{}}0000000000{{}Gj}00000000{dGl}0000000000{{{An{c}}{d{Bj}}}c{}}00000000`````{{}c{}}0000000000{{{d{Ej}}Hn{d{Ej}}}Ib}{{{d{Ej}}Hn{d{Ej}}f}Ib}","D":"CNn","p":[[5,"ControllerContractRef",9],[1,"reference",null,null,1],[6,"Address",1515],[5,"BaseControllerContractRef",9],[0,"mut"],[5,"Controller",9],[5,"PaymentVoucher",1174],[5,"Bytes",1516],[1,"unit"],[5,"ControllerHostRef",9,1517],[5,"RenewalPaymentVoucher",1174],[6,"CLType",1518],[5,"BaseControllerHostRef",9,1519],[6,"CustomType",1520],[6,"Option",1521,null,1],[5,"Vec",1522],[5,"HostEnv",1523],[10,"OdraConfig",1523],[5,"EntryPointsCaller",1524],[5,"Entrypoint",1525],[5,"ContractEnv",1526],[5,"Rc",1527,null,1],[5,"BaseController",9],[5,"PaymentFulfilled",9],[1,"bool"],[5,"SignerPublicKeyChanged",9],[5,"TreasuryAddressChanged",9],[5,"String",1528],[5,"Schema",1529],[5,"BTreeMap",1530],[5,"Event",1525],[5,"Formatter",1531],[8,"Result",1531],[1,"u8"],[1,"slice"],[1,"tuple",null,null,1],[6,"Error",1532],[6,"Result",1533,null,1],[1,"i32"],[6,"EventError",1534],[10,"FromBytes",1532],[10,"EventInstance",1535],[8,"Role",1536],[6,"PublicKey",1537],[1,"str"],[5,"RuntimeArgs",1538],[5,"ControllerInitArgs",9,1517],[5,"ContractCallResult",1539],[5,"U512",1540],[10,"Payment",1174],[10,"ToBytes",1532],[1,"never"],[6,"OdraError",1534],[10,"Into",1541,null,1],[5,"Entrypoint",1520],[5,"UserError",1520],[5,"Event",1520],[1,"usize"],[5,"U256",1540],[8,"OdraResult",1534],[6,"NamedCLType",1542],[5,"TypeId",1543],[5,"SecondaryMarketContractRef",311],[5,"SecondaryMarket",311],[5,"SecondarySaleVoucher",1174],[5,"SecondaryMarketHostRef",311,1544],[5,"SecondaryMarketInitArgs",311,1544],[5,"NameToken",425],[5,"NameTokenContractRef",425],[5,"NameTokenHostRef",425,1545],[1,"u64"],[5,"NameTokenInitArgs",425,1545],[5,"NameTokenMetadata",1174],[5,"RegistrarContractRef",641],[5,"Registrar",641],[5,"RegistrarHostRef",641,1546],[5,"TokenRenewalInfo",1174],[5,"NameMintInfo",1174],[5,"RenewalVoucher",1174],[5,"TokenizationVoucher",1174],[5,"GracePeriodChanged",641],[5,"RegistrarInitArgs",641,1546],[5,"ResolverContractRef",829],[5,"DefaultResolverContractRef",829],[5,"ResolverHostRef",829,1547],[5,"DefaultResolverHostRef",829,1548],[5,"DefaultResolver",829],[5,"ResolutionChanged",829],[5,"ResolutionCleared",829],[5,"NameTokenAddressChanged",829],[5,"DefaultResolverInitArgs",829,1548],[5,"ReverseResolverContractRef",1064],[5,"ReverseResolverHostRef",1064,1549],[5,"ReverseResolver",1064],[5,"PrimaryNameChanged",1064],[5,"ReverseResolverInitArgs",1064,1549],[10,"ToTokenId",1172],[5,"Private",1550],[5,"PaymentInfo",1174],[5,"NameTransferInfo",1174],[10,"Deserializer",1551],[10,"ExpirableVoucher",1174],[6,"NameTokenError",1174],[10,"Serializer",1552],[6,"ControllerError",9],[6,"NameTokenError",425],[6,"RegistrarError",641],[6,"ResolverError",829]],"r":[[11,1519],[17,1517],[18,1517],[28,1517],[30,1519],[36,1517],[37,1517],[40,1519],[47,1517],[48,1517],[51,1519],[55,1517],[58,1517],[65,1517],[66,1519],[73,1517],[74,1519],[78,1517],[80,1519],[96,1517],[97,1517],[100,1519],[105,1517],[106,1519],[109,1517],[112,1519],[115,1517],[118,1519],[120,1517],[122,1519],[125,1517],[135,1517],[136,1517],[137,1517],[140,1519],[147,1517],[150,1519],[154,1517],[155,1519],[166,1517],[169,1519],[172,1517],[175,1517],[178,1517],[181,1519],[184,1517],[189,1517],[192,1519],[213,1517],[217,1517],[219,1517],[222,1517],[229,1517],[230,1517],[231,1517],[241,1517],[242,1517],[245,1519],[247,1517],[248,1519],[249,1517],[250,1519],[251,1517],[257,1517],[258,1517],[261,1519],[263,1517],[264,1519],[265,1517],[266,1517],[267,1519],[268,1517],[269,1517],[270,1519],[271,1517],[272,1517],[273,1517],[274,1517],[283,1517],[284,1517],[287,1519],[291,1517],[301,1517],[302,1517],[305,1519],[308,1517],[310,1519],[313,1544],[314,1544],[316,1544],[319,1544],[320,1544],[323,1544],[324,1544],[327,1544],[328,1544],[332,1544],[335,1544],[340,1544],[341,1544],[342,1544],[345,1544],[348,1544],[350,1544],[353,1544],[356,1544],[357,1544],[358,1544],[361,1544],[362,1544],[364,1544],[367,1544],[370,1544],[374,1544],[381,1544],[384,1544],[385,1544],[388,1544],[390,1544],[391,1544],[396,1544],[397,1544],[398,1544],[399,1544],[400,1544],[403,1544],[404,1544],[405,1544],[406,1544],[407,1544],[408,1544],[409,1544],[410,1544],[411,1544],[414,1544],[415,1544],[418,1544],[421,1544],[422,1544],[424,1544],[432,1545],[433,1545],[439,1545],[441,1545],[444,1545],[447,1545],[450,1545],[453,1545],[456,1545],[459,1545],[462,1545],[463,1545],[467,1545],[468,1545],[472,1545],[473,1545],[477,1545],[480,1545],[485,1545],[486,1545],[490,1545],[491,1545],[494,1545],[497,1545],[499,1545],[502,1545],[505,1545],[506,1545],[507,1545],[511,1545],[514,1545],[515,1545],[517,1545],[520,1545],[523,1545],[524,1545],[527,1545],[530,1545],[533,1545],[536,1545],[540,1545],[543,1545],[546,1545],[549,1545],[557,1545],[560,1545],[563,1545],[566,1545],[567,1545],[570,1545],[574,1545],[577,1545],[580,1545],[581,1545],[582,1545],[583,1545],[584,1545],[585,1545],[586,1545],[587,1545],[588,1545],[593,1545],[594,1545],[596,1545],[597,1545],[598,1545],[599,1545],[602,1545],[603,1545],[605,1545],[606,1545],[607,1545],[608,1545],[609,1545],[610,1545],[611,1545],[612,1545],[613,1545],[614,1545],[615,1545],[616,1545],[617,1545],[618,1545],[619,1545],[620,1545],[621,1545],[622,1545],[623,1545],[624,1545],[627,1545],[628,1545],[632,1545],[633,1545],[637,1545],[639,1545],[650,1546],[651,1546],[657,1546],[660,1546],[663,1546],[666,1546],[669,1546],[672,1546],[676,1546],[677,1546],[682,1546],[683,1546],[687,1546],[690,1546],[693,1546],[696,1546],[700,1546],[703,1546],[709,1546],[714,1546],[715,1546],[718,1546],[721,1546],[724,1546],[727,1546],[729,1546],[732,1546],[737,1546],[738,1546],[739,1546],[744,1546],[746,1546],[749,1546],[753,1546],[756,1546],[759,1546],[763,1546],[774,1546],[777,1546],[778,1546],[779,1546],[780,1546],[781,1546],[782,1546],[783,1546],[784,1546],[787,1546],[791,1546],[792,1546],[794,1546],[795,1546],[796,1546],[797,1546],[801,1546],[802,1546],[804,1546],[805,1546],[806,1546],[807,1546],[808,1546],[809,1546],[814,1546],[815,1546],[819,1546],[824,1546],[825,1546],[828,1546],[831,1548],[832,1548],[843,1547],[847,1547],[849,1548],[851,1547],[857,1548],[858,1548],[861,1547],[867,1548],[868,1548],[876,1547],[877,1548],[881,1548],[883,1547],[885,1548],[895,1547],[901,1548],[902,1548],[907,1547],[908,1548],[911,1548],[914,1548],[916,1548],[918,1547],[921,1548],[926,1547],[932,1548],[933,1548],[934,1548],[940,1547],[943,1548],[947,1547],[948,1548],[953,1548],[955,1547],[961,1548],[963,1547],[966,1548],[970,1548],[986,1547],[989,1548],[991,1547],[994,1548],[1002,1547],[1008,1548],[1009,1548],[1011,1548],[1012,1548],[1013,1547],[1014,1548],[1016,1547],[1022,1548],[1023,1548],[1025,1547],[1026,1548],[1027,1547],[1028,1548],[1029,1548],[1030,1547],[1031,1548],[1032,1547],[1033,1548],[1038,1547],[1044,1548],[1045,1548],[1051,1547],[1057,1548],[1058,1548],[1061,1547],[1063,1548],[1067,1549],[1068,1549],[1070,1549],[1074,1549],[1075,1549],[1079,1549],[1080,1549],[1084,1549],[1088,1549],[1091,1549],[1098,1549],[1099,1549],[1102,1549],[1105,1549],[1107,1549],[1110,1549],[1114,1549],[1115,1549],[1116,1549],[1120,1549],[1123,1549],[1126,1549],[1140,1549],[1147,1549],[1148,1549],[1150,1549],[1151,1549],[1154,1549],[1155,1549],[1157,1549],[1161,1549],[1162,1549],[1167,1549],[1168,1549],[1171,1549]],"b":[[1446,"impl-TryFrom%3CVec%3C(String,+String)%3E%3E-for-NameTokenMetadata"],[1447,"impl-TryFrom%3CString%3E-for-NameTokenMetadata"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAPQDbgAAAAkADQABABQAAgAYAAEAHAAZADwAHwBnAAQAeAADAIAAAgCKAAAAjwACAJgACQClAAUAsAAAALoAAQDCABEA3AAAAOEABQDpAA4A/QAKABQBDQAmAREAPAEJAEkBCQBXAQAAXgEBAGYBAABrAQUAdAEAAHgBAwCCAQAAhgEBAIkBBQCSAQMAnQEDAKQBCQCwAQAAswECALkBBADHAQIAzQEWAOwBAADzAQEA+wEAAAECCAANAgMAFwIDACECAgAnAgQALwIFADgCBABAAgIATgIGAFkCBAByAhEAhQICAIoCAACNAgUAogIOALoCCQDHAgAAzgIBANkCAQDeAgAA5AIAAOYCAADqAgQA8AICAPkCAAD9AgcACAMBABIDAQAVAwUAHwMFACsDBgA1AwgAQgMCAEgDAQBLAwAATQMxAIkDBACUAwMAmwMCAKcDAACpAwQAsQMLAMADBADIAwAAzAMPAN8DAQDkAw8A+AMJAAsEHQAuBBoATgQBAFMEBQBcBAAAXwQIAGkECQB2BAgAgQQEAIcEDgCXBAQAoAQBAKYEAACoBAEArAR/AC8FAAA4BRIAVgWVAA==","P":[[31,"T"],[53,""],[71,"T"],[73,""],[91,"T"],[102,""],[105,"T"],[107,""],[130,"U"],[137,""],[138,"U"],[142,""],[174,"P"],[176,""],[185,"E"],[187,""],[234,"T"],[236,"U,T"],[247,""],[252,"U"],[263,""],[293,"T"],[296,"V"],[307,""],[317,"T"],[325,""],[331,"T"],[332,""],[338,"T"],[343,""],[354,"U"],[357,""],[358,"U"],[359,""],[371,"E"],[372,""],[393,"T"],[394,"U,T"],[398,""],[401,"U"],[405,""],[419,"V"],[423,""],[460,"T"],[470,""],[476,"T"],[477,""],[483,"T"],[488,""],[491,"T"],[492,""],[503,"U"],[506,""],[507,"U"],[509,""],[537,"E"],[538,""],[590,"T"],[591,"U,T"],[596,""],[600,"U"],[605,""],[630,"V"],[635,""],[673,"T"],[685,""],[699,"T"],[700,""],[711,"T"],[717,""],[718,"T"],[719,""],[734,"U"],[739,""],[740,"U"],[741,""],[760,"E"],[761,""],[786,"T"],[787,""],[788,"U,T"],[794,""],[798,"U"],[804,""],[820,"T"],[821,"V"],[827,""],[850,"T"],[870,""],[880,"T"],[881,""],[894,"T"],[904,""],[907,"T"],[909,""],[925,"U"],[934,""],[935,"U"],[936,""],[967,"E"],[968,""],[1000,"T"],[1001,"U,T"],[1011,""],[1015,"U"],[1025,""],[1047,"T"],[1050,"V"],[1060,""],[1072,"T"],[1082,""],[1087,"T"],[1088,""],[1096,"T"],[1101,""],[1102,"T"],[1103,""],[1112,"U"],[1115,""],[1116,"U"],[1118,""],[1130,"E"],[1131,""],[1144,"T"],[1145,"U,T"],[1150,""],[1152,"U"],[1157,""],[1164,"T"],[1165,"V"],[1170,""],[1207,"T"],[1230,""],[1259,"T"],[1269,""],[1279,"__D"],[1280,""],[1323,"T"],[1326,""],[1327,"T"],[1335,""],[1354,"U"],[1365,""],[1407,"__S"],[1408,""],[1428,"T"],[1438,""],[1444,"U,T"],[1446,"TryFrom::Error"],[1448,"U,T"],[1457,"U"],[1468,""],[1488,"T"],[1502,"V"],[1513,""]]}]]')); if (typeof exports !== 'undefined') exports.searchIndex = searchIndex; else if (window.initSearch) window.initSearch(searchIndex); +//{"start":39,"fragment_lengths":[41541]} \ No newline at end of file diff --git a/docs/search.desc/casper_name_contracts/casper_name_contracts-desc-0-.js b/docs/search.desc/casper_name_contracts/casper_name_contracts-desc-0-.js index 27dc0d7..d25977c 100644 --- a/docs/search.desc/casper_name_contracts/casper_name_contracts-desc-0-.js +++ b/docs/search.desc/casper_name_contracts/casper_name_contracts-desc-0-.js @@ -1 +1 @@ -searchState.loadedDescShard("casper_name_contracts", 0, "Base for all controllers. It handles access controy, …\nBaseController Contract Ref.\nBaseController Host Ref.\nController smart contract. It handles payments and talks …\nController Contract Ref.\nController errors.\nController Host Ref.\nController contract constructor arguments.\nEvent with the payment information.\nPayable. Buys new name tokens.\nPayable. Buys new name tokens.\nPayable. Buys new name tokens.\nPayable. Buys new name tokens and renews existing ones.\nPayable. Buys new name tokens and renews existing ones.\nPayable. Buys new name tokens and renews existing ones.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.controller.has_role() for details.\nDelegated. See self.controller.has_role() for details.\nDelegated. See self.controller.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nInitializes the controller with the registrar contract …\nInitializes the controller with the registrar contract …\nInitializes the controller with the registrar contract …\nInitializes the controller. It assigns the deployer as the …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreates a new instance of the PaymentFulfilled event.\nValidate the payment voucher and process the payment.\nPayable. Renews name tokens.\nPayable. Renews name tokens.\nPayable. Renews name tokens.\nTry to resolve a full domain name to an address.\nTry to resolve a full domain name to an address.\nTry to resolve a full domain name to an address.\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_signer_public_key() for …\nAdmin only. Sets the public key of the signer.\nDelegated. See self.controller.set_treasury() for details.\nDelegated. See self.controller.set_treasury() for details.\nDelegated. See self.controller.set_treasury() for details.\nAdmin only. Sets the treasury address.\nDelegated. See self.controller.signer_public_key() for …\nDelegated. See self.controller.signer_public_key() for …\nDelegated. See self.controller.signer_public_key() for …\nReturns the public key of the signer.\nPayable. Buys new name tokens. Does not fail in case of …\nPayable. Buys new name tokens and renews existing ones. …\nDelegated. See self.controller.grant_role() for details. …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.controller.has_role() for details. …\nDelegated. See self.access_control.has_role() for details. …\nInitializes the controller with the registrar contract …\nPayable. Renews name tokens. Does not fail in case of …\nTry to resolve a full domain name to an address. Does not …\nDelegated. See self.controller.revoke_role() for details. …\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_treasury() for details. …\nDelegated. See self.controller.signer_public_key() for …\nSecondary market smart contract. It handles the secondary …\nSecondaryMarket Contract Ref.\nSecondaryMarket Host Ref.\nSecondaryMarket contract constructor arguments.\nPayable. Buys name tokens from the secondary market.\nPayable. Buys name tokens from the secondary market.\nPayable. Buys name tokens from the secondary market.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.controller.has_role() for details.\nDelegated. See self.controller.has_role() for details.\nDelegated. See self.controller.has_role() for details.\nInitializes the secondary market with the signer public …\nInitializes the secondary market with the signer public …\nInitializes the secondary market with the signer public …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_treasury() for details.\nDelegated. See self.controller.set_treasury() for details.\nDelegated. See self.controller.set_treasury() for details.\nDelegated. See self.controller.signer_public_key() for …\nDelegated. See self.controller.signer_public_key() for …\nDelegated. See self.controller.signer_public_key() for …\nPayable. Buys name tokens from the secondary market. Does …\nDelegated. See self.controller.grant_role() for details. …\nDelegated. See self.controller.has_role() for details. …\nInitializes the secondary market with the signer public …\nDelegated. See self.controller.revoke_role() for details. …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_treasury() for details. …\nDelegated. See self.controller.signer_public_key() for …\nNameToken contract. It is a CEP78 token with additional …\nNameToken Contract Ref.\nNameToken Host Ref.\nNameToken contract constructor arguments.\nOnly admin. Transfer tokens to the given recipient.\nOnly admin. Transfer tokens to the given recipient.\nOnly admin. Transfer tokens to the given recipient.\nDelegated. See self.token.approve() for details.\nDelegated. See self.token.approve() for details.\nDelegated. See self.token.approve() for details.\nCheck if the address is the owner of the token with the …\nCheck if the address is the owner of the token with the …\nCheck if the address is the owner of the token with the …\nDelegated. See self.token.balance_of() for details.\nDelegated. See self.token.balance_of() for details.\nDelegated. See self.token.balance_of() for details.\nOnly admin. Burns the token with the given hash.\nOnly admin. Burns the token with the given hash.\nOnly admin. Burns the token with the given hash.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nDelegated. See self.token.get_approved() for details.\nDelegated. See self.token.get_approved() for details.\nDelegated. See self.token.get_approved() for details.\nDelegated. See self.token.get_collection_name() for …\nDelegated. See self.token.get_collection_name() for …\nDelegated. See self.token.get_collection_name() for …\nDelegated. See self.token.get_collection_symbol() for …\nDelegated. See self.token.get_collection_symbol() for …\nDelegated. See self.token.get_collection_symbol() for …\nGet the default resolver.\nGet the default resolver.\nGet the default resolver.\nInitializes CEP78 with the given name and symbol.\nInitializes CEP78 with the given name and symbol.\nInitializes CEP78 with the given name and symbol.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDelegated. See self.token.is_approved_for_all() for …\nDelegated. See self.token.is_approved_for_all() for …\nDelegated. See self.token.is_approved_for_all() for …\nCheck if the token with the given hash is expired.\nCheck if the token with the given hash is expired.\nCheck if the token with the given hash is expired.\nDelegated. See self.token.metadata() for details.\nDelegated. See self.token.metadata() for details.\nDelegated. See self.token.metadata() for details.\nReturn the metadata of the token with the given hash.\nReturn the metadata of the token with the given hash.\nReturn the metadata of the token with the given hash.\nDelegated. See self.token.mint() for details.\nDelegated. See self.token.mint() for details.\nDelegated. See self.token.mint() for details.\nDelegated. See self.token.owner_of() for details.\nDelegated. See self.token.owner_of() for details.\nDelegated. See self.token.owner_of() for details.\nDelegated. See self.token.register_owner() for details.\nDelegated. See self.token.register_owner() for details.\nDelegated. See self.token.register_owner() for details.\nReturn the resolver of the token with the given hash.\nReturn the resolver of the token with the given hash.\nReturn the resolver of the token with the given hash.\nDelegated. See self.token.revoke() for details.\nDelegated. See self.token.revoke() for details.\nDelegated. See self.token.revoke() for details.\nDelegated. See self.token.set_approval_for_all() for …\nDelegated. See self.token.set_approval_for_all() for …\nDelegated. See self.token.set_approval_for_all() for …\nOnly admin. Set the default resolver.\nOnly admin. Set the default resolver.\nOnly admin. Set the default resolver.\nToken owner only. Set the resolver of the token with the …\nToken owner only. Set the resolver of the token with the …\nToken owner only. Set the resolver of the token with the …\nOnly admin. Set token’s metadata.\nOnly admin. Set token’s metadata.\nOnly admin. Set token’s metadata.\nDelegated. See self.token.set_variables() for details.\nDelegated. See self.token.set_variables() for details.\nDelegated. See self.token.set_variables() for details.\nChecks if a token with the given hash exists.\nChecks if a token with the given hash exists.\nChecks if a token with the given hash exists.\nTransfer token.\nTransfer token.\nTransfer token.\nOnly admin. Transfer tokens to the given recipient. Does …\nDelegated. See self.token.approve() for details. Does not …\nCheck if the address is the owner of the token with the …\nDelegated. See self.token.balance_of() for details. Does …\nOnly admin. Burns the token with the given hash. Does not …\nDelegated. See self.token.get_approved() for details. Does …\nDelegated. See self.token.get_collection_name() for …\nDelegated. See self.token.get_collection_symbol() for …\nGet the default resolver. Does not fail in case of error, …\nInitializes CEP78 with the given name and symbol. Does not …\nDelegated. See self.token.is_approved_for_all() for …\nCheck if the token with the given hash is expired. Does …\nDelegated. See self.token.metadata() for details. Does not …\nReturn the metadata of the token with the given hash. Does …\nDelegated. See self.token.mint() for details. Does not …\nDelegated. See self.token.owner_of() for details. Does not …\nDelegated. See self.token.register_owner() for details. …\nReturn the resolver of the token with the given hash. Does …\nDelegated. See self.token.revoke() for details. Does not …\nDelegated. See self.token.set_approval_for_all() for …\nOnly admin. Set the default resolver. Does not fail in …\nToken owner only. Set the resolver of the token with the …\nOnly admin. Set token’s metadata. Does not fail in case …\nDelegated. See self.token.set_variables() for details. …\nChecks if a token with the given hash exists. Does not …\nTransfer token. Does not fail in case of error, returns …\nRegistrar smart contract. It handles the registration and …\nRegistrar Contract Ref.\nRegistrar Host Ref.\nRegistrar contract constructor arguments.\nAdmin only. Burn a list of tokens.\nAdmin only. Burn a list of tokens.\nAdmin only. Burn a list of tokens.\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Register a list of tokens.\nAdmin only. Register a list of tokens.\nAdmin only. Register a list of tokens.\nAdmin only. Transfer ownership of a list of tokens.\nAdmin only. Transfer ownership of a list of tokens.\nAdmin only. Transfer ownership of a list of tokens.\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Register a list of tokens.\nController only. Register a list of tokens.\nController only. Register a list of tokens.\nExpire a list of tokens if they are expired.\nExpire a list of tokens if they are expired.\nExpire a list of tokens if they are expired.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the grace period.\nReturns the grace period.\nReturns the grace period.\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nInitializes the registrar with the name token contract …\nInitializes the registrar with the name token contract …\nInitializes the registrar with the name token contract …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nTry to resolve a full domain name to an address.\nTry to resolve a full domain name to an address.\nTry to resolve a full domain name to an address.\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nAdmin only. Sets the grace period.\nAdmin only. Sets the grace period.\nAdmin only. Sets the grace period.\nAdmin only. Burn a list of tokens. Does not fail in case …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Register a list of tokens. Does not fail in …\nAdmin only. Transfer ownership of a list of tokens. Does …\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Register a list of tokens. Does not fail …\nExpire a list of tokens if they are expired. Does not fail …\nReturns the grace period. Does not fail in case of error, …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.has_role() for details. …\nInitializes the registrar with the name token contract …\nTry to resolve a full domain name to an address. Does not …\nDelegated. See self.access_control.revoke_role() for …\nAdmin only. Sets the grace period. Does not fail in case …\nDefault Resolver smart contract. It handles the resolution …\nDefaultResolver Contract Ref.\nDefaultResolver Host Ref.\nDefaultResolver contract constructor arguments.\nEvent emitted when a resolution is changed.\nEvent emitted when a resolution is cleared.\n[Resolver] Contract Ref.\n[Resolver] Host Ref.\nCleanup the resolutions for a token. Only the token owner …\nCleanup the resolutions for a token. Only the token owner …\nCleanup the resolutions for a token. Only the token owner …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nInitializes the default resolver with the name token …\nInitializes the default resolver with the name token …\nInitializes the default resolver with the name token …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreates a new instance of the ResolutionChanged event.\nCreates a new instance of the ResolutionCleared event.\nResolves a domain to an address.\nResolves a domain to an address.\nResolves a domain to an address.\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nAdmin only. Sets the name token contract address.\nAdmin only. Sets the name token contract address.\nAdmin only. Sets the name token contract address.\nToken owner only. Sets the resolution for a domain to an …\nToken owner only. Sets the resolution for a domain to an …\nToken owner only. Sets the resolution for a domain to an …\nDoes not fail in case of error, returns odra::OdraResult …\nCleanup the resolutions for a token. Only the token owner …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.has_role() for details. …\nDoes not fail in case of error, returns odra::OdraResult …\nInitializes the default resolver with the name token …\nDoes not fail in case of error, returns odra::OdraResult …\nResolves a domain to an address. Does not fail in case of …\nDelegated. See self.access_control.revoke_role() for …\nDoes not fail in case of error, returns odra::OdraResult …\nAdmin only. Sets the name token contract address. Does not …\nDoes not fail in case of error, returns odra::OdraResult …\nToken owner only. Sets the resolution for a domain to an …\nEvent emitted when the primary name of an address changes.\nReverse Resolver contract. It resolves primary names to …\nReverseResolver Contract Ref.\nReverseResolver Host Ref.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the primary name for the address.\nReturns the primary name for the address.\nReturns the primary name for the address.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreates a new instance of the PrimaryNameChanged event.\nSets the primary preffered reverse resolution address for …\nSets the primary preffered reverse resolution address for …\nSets the primary preffered reverse resolution address for …\nReturns the primary name for the address. Does not fail in …\nSets the primary preffered reverse resolution address for …\nBasic minting information for a name token.\nErrors that can occur while working with name tokens.\nMetadata associated with a name token.\nPair of a label and owner address.\nInformation about a payment.\nInformation about a payment and a list of NameMintInfo …\nVoucher for renewing multiple name tokens, plus payment …\nVoucher for renewing multiple name tokens.\nInformation about a payment and a list of NameTransferInfo …\nRenewal information with new expiration time.\nList of NameMintInfo structs and the expiration time of …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).") \ No newline at end of file +searchState.loadedDescShard("casper_name_contracts", 0, "Base for all controllers. It handles access control, …\nBaseController Contract Ref.\nBaseController Host Ref.\nController smart contract. It handles payments and talks …\nController Contract Ref.\nController errors.\nController Host Ref.\nController contract constructor arguments.\nEvent with the payment information.\nEvent emitted when the signer public key is changed.\nEvent emitted when the treasury address is changed.\nPayable. Buys new name tokens.\nPayable. Buys new name tokens.\nPayable. Buys new name tokens.\nPayable. Buys new name tokens and renews existing ones.\nPayable. Buys new name tokens and renews existing ones.\nPayable. Buys new name tokens and renews existing ones.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.controller.has_role() for details.\nDelegated. See self.controller.has_role() for details.\nDelegated. See self.controller.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nInitializes the controller with the registrar contract …\nInitializes the controller with the registrar contract …\nInitializes the controller with the registrar contract …\nInitializes the controller. It assigns the deployer as the …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDelegated. See self.controller.is_paused() for details.\nDelegated. See self.controller.is_paused() for details.\nDelegated. See self.controller.is_paused() for details.\nDelegated. See self.pausable.is_paused() for details.\nDelegated. See self.pausable.is_paused() for details.\nDelegated. See self.pausable.is_paused() for details.\nCreates a new instance of the PaymentFulfilled event.\nCreates a new instance of the SignerPublicKeyChanged event.\nCreates a new instance of the TreasuryAddressChanged event.\nDelegated. See self.controller.pause() for details.\nDelegated. See self.controller.pause() for details.\nDelegated. See self.controller.pause() for details.\nTemporarily stops the contract.\nValidate the payment voucher and process the payment.\nPayable. Renews name tokens.\nPayable. Renews name tokens.\nPayable. Renews name tokens.\nDelegated. See self.pausable.require_not_paused() for …\nDelegated. See self.pausable.require_not_paused() for …\nDelegated. See self.pausable.require_not_paused() for …\nTry to resolve a full domain name to an address.\nTry to resolve a full domain name to an address.\nTry to resolve a full domain name to an address.\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_signer_public_key() for …\nAdmin only. Sets the public key of the signer.\nDelegated. See self.controller.set_treasury() for details.\nDelegated. See self.controller.set_treasury() for details.\nDelegated. See self.controller.set_treasury() for details.\nAdmin only. Sets the treasury address.\nDelegated. See self.controller.signer_public_key() for …\nDelegated. See self.controller.signer_public_key() for …\nDelegated. See self.controller.signer_public_key() for …\nReturns the public key of the signer.\nPayable. Buys new name tokens. Does not fail in case of …\nPayable. Buys new name tokens and renews existing ones. …\nDelegated. See self.controller.grant_role() for details. …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.controller.has_role() for details. …\nDelegated. See self.access_control.has_role() for details. …\nInitializes the controller with the registrar contract …\nDelegated. See self.controller.is_paused() for details. …\nDelegated. See self.pausable.is_paused() for details. Does …\nDelegated. See self.controller.pause() for details. Does …\nPayable. Renews name tokens. Does not fail in case of …\nDelegated. See self.pausable.require_not_paused() for …\nTry to resolve a full domain name to an address. Does not …\nDelegated. See self.controller.revoke_role() for details. …\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_treasury() for details. …\nDelegated. See self.controller.signer_public_key() for …\nDelegated. See self.controller.unpause() for details. Does …\nDelegated. See self.controller.unpause() for details.\nDelegated. See self.controller.unpause() for details.\nDelegated. See self.controller.unpause() for details.\nReturns to normal operation.\nSecondary market smart contract. It handles the secondary …\nSecondaryMarket Contract Ref.\nSecondaryMarket Host Ref.\nSecondaryMarket contract constructor arguments.\nPayable. Buys name tokens from the secondary market.\nPayable. Buys name tokens from the secondary market.\nPayable. Buys name tokens from the secondary market.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.controller.grant_role() for details.\nDelegated. See self.controller.has_role() for details.\nDelegated. See self.controller.has_role() for details.\nDelegated. See self.controller.has_role() for details.\nInitializes the secondary market with the signer public …\nInitializes the secondary market with the signer public …\nInitializes the secondary market with the signer public …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDelegated. See self.controller.is_paused() for details.\nDelegated. See self.controller.is_paused() for details.\nDelegated. See self.controller.is_paused() for details.\nDelegated. See self.controller.pause() for details.\nDelegated. See self.controller.pause() for details.\nDelegated. See self.controller.pause() for details.\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.controller.revoke_role() for details.\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_treasury() for details.\nDelegated. See self.controller.set_treasury() for details.\nDelegated. See self.controller.set_treasury() for details.\nDelegated. See self.controller.signer_public_key() for …\nDelegated. See self.controller.signer_public_key() for …\nDelegated. See self.controller.signer_public_key() for …\nPayable. Buys name tokens from the secondary market. Does …\nDelegated. See self.controller.grant_role() for details. …\nDelegated. See self.controller.has_role() for details. …\nInitializes the secondary market with the signer public …\nDelegated. See self.controller.is_paused() for details. …\nDelegated. See self.controller.pause() for details. Does …\nDelegated. See self.controller.revoke_role() for details. …\nDelegated. See self.controller.set_signer_public_key() for …\nDelegated. See self.controller.set_treasury() for details. …\nDelegated. See self.controller.signer_public_key() for …\nDelegated. See self.controller.unpause() for details. Does …\nDelegated. See self.controller.unpause() for details.\nDelegated. See self.controller.unpause() for details.\nDelegated. See self.controller.unpause() for details.\nNameToken contract. It is a CEP95 token with additional …\nNameToken Contract Ref.\nNameToken Host Ref.\nNameToken contract constructor arguments.\nDelegated. See self.ownable.accept_ownership() for details.\nDelegated. See self.ownable.accept_ownership() for details.\nDelegated. See self.ownable.accept_ownership() for details.\nDelegated. See self.token.approve() for details.\nDelegated. See self.token.approve() for details.\nDelegated. See self.token.approve() for details.\nDelegated. See self.token.approve_for_all() for details.\nDelegated. See self.token.approve_for_all() for details.\nDelegated. See self.token.approve_for_all() for details.\nDelegated. See self.token.approved_for() for details.\nDelegated. See self.token.approved_for() for details.\nDelegated. See self.token.approved_for() for details.\nDelegated. See self.token.balance_of() for details.\nDelegated. See self.token.balance_of() for details.\nDelegated. See self.token.balance_of() for details.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nGet the default resolver.\nGet the default resolver.\nGet the default resolver.\nDelegated. See self.ownable.get_owner() for details.\nDelegated. See self.ownable.get_owner() for details.\nDelegated. See self.ownable.get_owner() for details.\nDelegated. See self.ownable.get_pending_owner() for …\nDelegated. See self.ownable.get_pending_owner() for …\nDelegated. See self.ownable.get_pending_owner() for …\nInitializes CEP95 with the given name and symbol.\nInitializes CEP95 with the given name and symbol.\nInitializes CEP95 with the given name and symbol.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDelegated. See self.token.is_approved_for_all() for …\nDelegated. See self.token.is_approved_for_all() for …\nDelegated. See self.token.is_approved_for_all() for …\nDelegated. See self.token.name() for details.\nDelegated. See self.token.name() for details.\nDelegated. See self.token.name() for details.\nDelegated. See self.token.owner_of() for details.\nDelegated. See self.token.owner_of() for details.\nDelegated. See self.token.owner_of() for details.\nDelegated. See self.ownable.renounce_ownership() for …\nDelegated. See self.ownable.renounce_ownership() for …\nDelegated. See self.ownable.renounce_ownership() for …\nDelegated. See self.token.revoke_approval() for details.\nDelegated. See self.token.revoke_approval() for details.\nDelegated. See self.token.revoke_approval() for details.\nDelegated. See self.token.revoke_approval_for_all() for …\nDelegated. See self.token.revoke_approval_for_all() for …\nDelegated. See self.token.revoke_approval_for_all() for …\nDelegated. See self.token.safe_transfer_from() for details.\nDelegated. See self.token.safe_transfer_from() for details.\nDelegated. See self.token.safe_transfer_from() for details.\nOnly admin. Set the default resolver.\nOnly admin. Set the default resolver.\nOnly admin. Set the default resolver.\nDelegated. See self.token.symbol() for details.\nDelegated. See self.token.symbol() for details.\nDelegated. See self.token.symbol() for details.\nDelegated. See self.token.token_metadata() for details.\nDelegated. See self.token.token_metadata() for details.\nDelegated. See self.token.token_metadata() for details.\nDelegated. See self.ownable.transfer_ownership() for …\nDelegated. See self.ownable.transfer_ownership() for …\nDelegated. See self.ownable.transfer_ownership() for …\nDelegated. See self.ownable.accept_ownership() for details.\nDoes not fail in case of error, returns odra::OdraResult …\nDelegated. See self.token.approve() for details. Does not …\nDelegated. See self.token.approve_for_all() for details. …\nDelegated. See self.token.approved_for() for details. Does …\nDoes not fail in case of error, returns odra::OdraResult …\nDelegated. See self.token.balance_of() for details. Does …\nDoes not fail in case of error, returns odra::OdraResult …\nGet the default resolver. Does not fail in case of error, …\nDelegated. See self.ownable.get_owner() for details. Does …\nDelegated. See self.ownable.get_pending_owner() for …\nInitializes CEP95 with the given name and symbol. Does not …\nDelegated. See self.token.is_approved_for_all() for …\nDoes not fail in case of error, returns odra::OdraResult …\nDoes not fail in case of error, returns odra::OdraResult …\nDelegated. See self.token.name() for details. Does not …\nDelegated. See self.token.owner_of() for details. Does not …\nDelegated. See self.ownable.renounce_ownership() for …\nDoes not fail in case of error, returns odra::OdraResult …\nDelegated. See self.token.revoke_approval() for details. …\nDelegated. See self.token.revoke_approval_for_all() for …\nDoes not fail in case of error, returns odra::OdraResult …\nDelegated. See self.token.safe_transfer_from() for details.\nOnly admin. Set the default resolver. Does not fail in …\nDoes not fail in case of error, returns odra::OdraResult …\nDoes not fail in case of error, returns odra::OdraResult …\nDelegated. See self.token.symbol() for details. Does not …\nDoes not fail in case of error, returns odra::OdraResult …\nDelegated. See self.token.token_metadata() for details. …\nDoes not fail in case of error, returns odra::OdraResult …\nDelegated. See self.ownable.transfer_ownership() for …\nDoes not fail in case of error, returns odra::OdraResult …\nEvent emitted when the grace period is changed.\nRegistrar smart contract. It handles the registration and …\nRegistrar Contract Ref.\nRegistrar Host Ref.\nRegistrar contract constructor arguments.\nAdmin only. Burn a list of tokens.\nAdmin only. Burn a list of tokens.\nAdmin only. Burn a list of tokens.\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Register a list of tokens.\nAdmin only. Register a list of tokens.\nAdmin only. Register a list of tokens.\nAdmin only. Transfer ownership of a list of tokens.\nAdmin only. Transfer ownership of a list of tokens.\nAdmin only. Transfer ownership of a list of tokens.\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Register a list of tokens.\nController only. Register a list of tokens.\nController only. Register a list of tokens.\nExpire a list of tokens if they are expired.\nExpire a list of tokens if they are expired.\nExpire a list of tokens if they are expired.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the grace period.\nReturns the grace period.\nReturns the grace period.\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nInitializes the registrar with the name token contract …\nInitializes the registrar with the name token contract …\nInitializes the registrar with the name token contract …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDelegated. See self.pauseable.is_paused() for details.\nDelegated. See self.pauseable.is_paused() for details.\nDelegated. See self.pauseable.is_paused() for details.\nCreates a new instance of the GracePeriodChanged event.\nTemporarily stops the contract.\nTemporarily stops the contract.\nTemporarily stops the contract.\nTry to resolve a full domain name to an address.\nTry to resolve a full domain name to an address.\nTry to resolve a full domain name to an address.\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nAdmin only. Sets the grace period.\nAdmin only. Sets the grace period.\nAdmin only. Sets the grace period.\nAdmin only. Burn a list of tokens. Does not fail in case …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Prolong the expiration date of a list of …\nAdmin only. Register a list of tokens. Does not fail in …\nAdmin only. Transfer ownership of a list of tokens. Does …\nController only. Prolong the expiration date of a list of …\nController only. Prolong the expiration date of a list of …\nController only. Register a list of tokens. Does not fail …\nExpire a list of tokens if they are expired. Does not fail …\nReturns the grace period. Does not fail in case of error, …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.has_role() for details. …\nInitializes the registrar with the name token contract …\nDelegated. See self.pauseable.is_paused() for details. …\nTemporarily stops the contract. Does not fail in case of …\nTry to resolve a full domain name to an address. Does not …\nDelegated. See self.access_control.revoke_role() for …\nAdmin only. Sets the grace period. Does not fail in case …\nReturns to normal operation. Does not fail in case of …\nReturns to normal operation.\nReturns to normal operation.\nReturns to normal operation.\nDefault Resolver smart contract. It handles the resolution …\nDefaultResolver Contract Ref.\nDefaultResolver Host Ref.\nDefaultResolver contract constructor arguments.\nEvent emitted when the name token address is changed.\nEvent emitted when a resolution is changed.\nEvent emitted when a resolution is cleared.\n[Resolver] Contract Ref.\n[Resolver] Host Ref.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nDelegated. See self.access_control.has_role() for details.\nInitializes the default resolver with the name token …\nInitializes the default resolver with the name token …\nInitializes the default resolver with the name token …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nInvalidates all the resolutions for a token. Only the …\nInvalidates all the resolutions for a token. Only the …\nInvalidates all the resolutions for a token. Only the …\nCreates a new instance of the ResolutionChanged event.\nCreates a new instance of the ResolutionCleared event.\nCreates a new instance of the NameTokenAddressChanged …\nResolves a domain to an address.\nResolves a domain to an address.\nResolves a domain to an address.\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nDelegated. See self.access_control.revoke_role() for …\nAdmin only. Sets the name token contract address.\nAdmin only. Sets the name token contract address.\nAdmin only. Sets the name token contract address.\nToken owner only. Sets the resolution for a domain to an …\nToken owner only. Sets the resolution for a domain to an …\nToken owner only. Sets the resolution for a domain to an …\nDelegated. See self.access_control.grant_role() for …\nDelegated. See self.access_control.has_role() for details. …\nDoes not fail in case of error, returns odra::OdraResult …\nInitializes the default resolver with the name token …\nDoes not fail in case of error, returns odra::OdraResult …\nInvalidates all the resolutions for a token. Only the …\nDoes not fail in case of error, returns odra::OdraResult …\nResolves a domain to an address. Does not fail in case of …\nDelegated. See self.access_control.revoke_role() for …\nDoes not fail in case of error, returns odra::OdraResult …\nAdmin only. Sets the name token contract address. Does not …\nDoes not fail in case of error, returns odra::OdraResult …\nToken owner only. Sets the resolution for a domain to an …\nEvent emitted when the primary name of an address changes.\nReverse Resolver contract. It resolves primary names to …\nReverseResolver Contract Ref.\nReverseResolver Host Ref.\nReverseResolver contract constructor arguments.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the primary name for the address.\nReturns the primary name for the address.\nReturns the primary name for the address.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreates a new instance of the PrimaryNameChanged event.\nSets the primary preferred reverse resolution address for …\nSets the primary preferred reverse resolution address for …\nSets the primary preferred reverse resolution address for …\nReturns the primary name for the address. Does not fail in …\nDoes not fail in case of error, returns odra::OdraResult …\nSets the primary preferred reverse resolution address for …\nConverts the label to a token ID.\nBasic minting information for a name token.\nErrors that can occur while working with name tokens.\nMetadata associated with a name token.\nPair of a label and owner address.\nInformation about a payment.\nInformation about a payment and a list of NameMintInfo …\nVoucher for renewing multiple name tokens, plus payment …\nVoucher for renewing multiple name tokens.\nInformation about a payment and a list of NameTransferInfo …\nRenewal information with new expiration time.\nList of NameMintInfo structs and the expiration time of …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).") \ No newline at end of file diff --git a/docs/settings.html b/docs/settings.html index 3c33799..4fe542f 100644 --- a/docs/settings.html +++ b/docs/settings.html @@ -1 +1 @@ -Settings

Rustdoc settings

Back
\ No newline at end of file +Settings

Rustdoc settings

Back
\ No newline at end of file diff --git a/docs/src-files.js b/docs/src-files.js index b2a555d..080e8a0 100644 --- a/docs/src-files.js +++ b/docs/src-files.js @@ -1,4 +1,3 @@ -var srcIndex = new Map(JSON.parse('[\ -["casper_name_contracts",["",[["contracts",[],["controller.rs","marketplace.rs","mod.rs","name_token.rs","registrar.rs","resolver.rs","reverse_resolver.rs","utils.rs"]]],["data_structures.rs","lib.rs"]]]\ -]')); +var srcIndex = new Map(JSON.parse('[["casper_name_contracts",["",[["contracts",[],["controller.rs","marketplace.rs","mod.rs","name_token.rs","registrar.rs","resolver.rs","reverse_resolver.rs","token_id.rs","utils.rs"]]],["data_structures.rs","lib.rs"]]]]')); createSrcSidebar(); +//{"start":36,"fragment_lengths":[217]} \ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/controller.rs.html b/docs/src/casper_name_contracts/contracts/controller.rs.html index 3ff75c1..f1ec7c5 100644 --- a/docs/src/casper_name_contracts/contracts/controller.rs.html +++ b/docs/src/casper_name_contracts/contracts/controller.rs.html @@ -1,4 +1,5 @@ -controller.rs - source
1
+controller.rs - source

casper_name_contracts/contracts/
controller.rs

+1
 2
 3
 4
@@ -274,18 +275,293 @@
 274
 275
 276
-
use super::registrar::RegistrarContractRef;
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
use super::registrar::RegistrarContractRef;
 use crate::data_structures::{Payment, PaymentVoucher, RenewalPaymentVoucher};
 use odra::{
     casper_types::{
         bytesrepr::{Bytes, ToBytes},
         PublicKey, U512,
     },
-    module::{Module, Revertible},
     prelude::*,
-    Address, External, SubModule, UnwrapOrRevert, Var,
 };
-use odra_modules::access::{AccessControl, Role, DEFAULT_ADMIN_ROLE};
+use odra_modules::{
+    access::{AccessControl, Role, DEFAULT_ADMIN_ROLE},
+    security::Pauseable,
+};
 
 /// Event with the payment information.
 #[odra::event]
@@ -295,6 +571,18 @@
     amount: U512,
 }
 
+/// Event emitted when the signer public key is changed.
+#[odra::event]
+pub struct SignerPublicKeyChanged {
+    new_signer_public_key: PublicKey,
+}
+
+/// Event emitted when the treasury address is changed.
+#[odra::event]
+pub struct TreasuryAddressChanged {
+    new_treasury_address: Address,
+}
+
 /// Controller smart contract. It handles payments and talks to the [Registrar
 /// Contract](super::registrar::Registrar).
 #[odra::module]
@@ -313,12 +601,18 @@
             fn set_signer_public_key(&mut self, signer: PublicKey);
             fn set_treasury(&mut self, treasury: Address);
             fn signer_public_key(&self) -> PublicKey;
+            fn pause(&mut self);
+            fn unpause(&mut self);
+            fn is_paused(&self) -> bool;
         }
     }
 
     /// Initializes the controller with the registrar contract address, the
     /// signer public key and the treasury address.
     pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address) {
+        if !registrar.is_contract() {
+            self.revert(ControllerError::ContractAddressExpected);
+        }
         self.registrar.set(registrar);
         self.controller.init(signer, treasury);
     }
@@ -326,6 +620,7 @@
     /// Payable. Buys new name tokens.
     #[odra(payable)]
     pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes) {
+        self.controller.require_not_paused();
         self.controller.process_payment_voucher(&voucher, signature);
         self.registrar.controller_register(voucher.into());
     }
@@ -333,6 +628,7 @@
     /// Payable. Renews name tokens.
     #[odra(payable)]
     pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes) {
+        self.controller.require_not_paused();
         self.controller.process_payment_voucher(&voucher, signature);
         self.registrar.controller_prolong(voucher.into());
     }
@@ -346,6 +642,7 @@
         renewal_voucher: RenewalPaymentVoucher,
         renewal_signature: Bytes,
     ) {
+        self.controller.require_not_paused();
         self.controller
             .process_payment_voucher(&payment_voucher, payment_signature);
         self.controller
@@ -360,13 +657,17 @@
     }
 }
 
-/// Base for all controllers. It handles access controy, treasury and signer
+/// Base for all controllers. It handles access control, treasury and signer
 /// public key.
-#[odra::module(events = [PaymentFulfilled])]
+#[odra::module(
+    errors = ControllerError,
+    events = [PaymentFulfilled, SignerPublicKeyChanged, TreasuryAddressChanged]
+)]
 pub struct BaseController {
     signer_public_key: Var<PublicKey>,
     treasury: Var<Address>,
     access_control: SubModule<AccessControl>,
+    pausable: SubModule<Pauseable>,
 }
 
 #[odra::module]
@@ -377,6 +678,11 @@
             fn grant_role(&mut self, role: &Role, address: &Address);
             fn revoke_role(&mut self, role: &Role, address: &Address);
         }
+
+        to self.pausable {
+            fn is_paused(&self) -> bool;
+            fn require_not_paused(&self);
+        }
     }
 }
 
@@ -393,16 +699,34 @@
             .unchecked_grant_role(&DEFAULT_ADMIN_ROLE, &admin);
     }
 
+    /// Temporarily stops the contract.
+    pub fn pause(&mut self) {
+        self.assert_caller_is_admin();
+        self.pausable.pause();
+    }
+
+    /// Returns to normal operation.
+    pub fn unpause(&mut self) {
+        self.assert_caller_is_admin();
+        self.pausable.unpause();
+    }
+
     /// Admin only. Sets the public key of the signer.
     pub fn set_signer_public_key(&mut self, signer: PublicKey) {
         self.assert_caller_is_admin();
-        self.signer_public_key.set(signer);
+        self.signer_public_key.set(signer.clone());
+        self.env().emit_event(SignerPublicKeyChanged {
+            new_signer_public_key: signer,
+        });
     }
 
     /// Admin only. Sets the treasury address.
     pub fn set_treasury(&mut self, treasury: Address) {
         self.assert_caller_is_admin();
         self.treasury.set(treasury);
+        self.env().emit_event(TreasuryAddressChanged {
+            new_treasury_address: treasury,
+        });
     }
 
     /// Returns the public key of the signer.
@@ -434,9 +758,13 @@
             .treasury
             .get_or_revert_with(ControllerError::FeeCollectorNotSet);
         let payment_info = voucher.payment_info();
-        if self.env().attached_value() < payment_info.amount {
+        let attached_value = self.env().attached_value();
+        if attached_value < payment_info.amount {
             self.revert(ControllerError::InsufficientPayment);
         }
+        if attached_value > payment_info.amount {
+            self.revert(ControllerError::PaymentTooLarge);
+        }
         self.env()
             .transfer_tokens(&fee_collector, &payment_info.amount);
         self.env().emit_event(PaymentFulfilled {
@@ -464,17 +792,42 @@
     RegistrarNotSet = 1103,
     BuyerMustBeCaller = 1104,
     InsufficientPayment = 1105,
+    PaymentTooLarge = 1106,
+    ContractAddressExpected = 1107,
 }
 
 #[cfg(test)]
 mod tests {
-    use odra::{casper_types::U512, host::HostRef};
+    use odra::{
+        casper_event_standard::EventInstance,
+        casper_types::U512,
+        host::{Deployer, HostRef},
+    };
 
     use crate::{
+        contracts::controller::{
+            Controller, ControllerInitArgs, SignerPublicKeyChanged, TreasuryAddressChanged,
+        },
         data_structures::{NameMintInfo, PaymentVoucher, RenewalPaymentVoucher, TokenRenewalInfo},
-        test_context::{TestContext, INIT_TIME, TOKEN_EXPIRATION, TOKEN_NAME},
+        test_context::{generate_token_id, TestContext, INIT_TIME, TOKEN_EXPIRATION, TOKEN_NAME},
     };
 
+    #[test]
+    fn deploy_fails_if_account_set_as_registrar() {
+        let env = odra_test::env();
+        let signer = env.get_account(10);
+        let treasury = env.get_account(11);
+        let result = Controller::try_deploy(
+            &env,
+            ControllerInitArgs {
+                registrar: env.get_account(1),
+                signer: env.public_key(&signer),
+                treasury,
+            },
+        );
+        assert!(result.is_err());
+    }
+
     #[test]
     fn test_controller() {
         let mut ctx = TestContext::install_and_setup();
@@ -485,7 +838,7 @@
         let voucher_expiration = ctx.token_expiration_time();
         let amount = U512::from(2000);
 
-        let names = vec![NameMintInfo::new(TOKEN_NAME, alice, token_expiration)];
+        let names = vec![NameMintInfo::new(TOKEN_NAME, alice, token_expiration, "")];
         let voucher = PaymentVoucher::new(amount, "id_1", alice, names, voucher_expiration);
         let signature = ctx.sign(&voucher);
 
@@ -500,7 +853,7 @@
             .buy(voucher, signature.clone());
 
         // Token was minted.
-        assert_eq!(ctx.token.balance_of(alice), 1);
+        assert_eq!(ctx.token.balance_of(alice), 1.into());
 
         // CSPR balances after the purchase.
         assert_eq!(
@@ -522,7 +875,7 @@
         let amount = U512::from(2000);
 
         let names = vec![TokenRenewalInfo::new(
-            TOKEN_NAME.to_string(),
+            generate_token_id(TOKEN_NAME),
             token_expiration,
         )];
         let voucher = RenewalPaymentVoucher::new(amount, "id_1", alice, names, voucher_expiration);
@@ -540,7 +893,7 @@
             .renew(voucher, signature.clone());
 
         // Token was minted.
-        assert_eq!(ctx.token.balance_of(alice), 1);
+        assert_eq!(ctx.token.balance_of(alice), 1.into());
 
         // CSPR balances after the purchase.
         assert_eq!(
@@ -549,5 +902,202 @@
         );
         assert_eq!(ctx.balance_of(&alice), alice_balance - amount);
     }
+
+    #[test]
+    fn test_only_admin_can_pause() {
+        let mut ctx = TestContext::install_and_setup();
+        // Given a contract with an admin and a user.
+        let (admin, alice) = (ctx.admin, ctx.alice);
+
+        // When a non-admin tries to pause it.
+        ctx.set_caller(alice);
+        let result = ctx.controller.try_pause();
+        // Then it should fail and the contract should not be paused.
+        assert!(result.is_err());
+        assert!(!ctx.controller.is_paused());
+
+        // When the admin tries to pause it.
+        ctx.set_caller(admin);
+        ctx.controller.pause();
+
+        // Then the contract should be paused.
+        assert!(ctx.controller.is_paused());
+    }
+
+    #[test]
+    fn test_only_admin_can_unpause() {
+        let mut ctx = TestContext::install_and_setup();
+        // Given a paused contract.
+        let (admin, alice) = (ctx.admin, ctx.alice);
+        ctx.controller.pause();
+        assert!(ctx.controller.is_paused());
+
+        // When a non-admin tries to unpause it.
+        ctx.set_caller(alice);
+        let result = ctx.controller.try_unpause();
+        // Then it should fail.
+        assert!(result.is_err());
+        assert!(ctx.controller.is_paused());
+
+        // When the admin tries to unpause it.
+        ctx.set_caller(admin);
+        ctx.controller.unpause();
+
+        // Then the contract should be unpaused.
+        assert!(!ctx.controller.is_paused());
+    }
+
+    #[test]
+    fn test_buy_require_not_paused() {
+        let mut ctx = TestContext::install_and_setup();
+        // Given a paused contract.
+        ctx.controller.pause();
+        assert!(ctx.controller.is_paused());
+
+        // When a user tries to buy a name.
+        ctx.set_caller(ctx.alice);
+        let voucher = PaymentVoucher::new(
+            U512::from(2000),
+            "id_1",
+            ctx.alice,
+            vec![NameMintInfo::new(
+                TOKEN_NAME,
+                ctx.alice,
+                ctx.token_expiration_time(),
+                "",
+            )],
+            ctx.token_expiration_time(),
+        );
+        let signature = ctx.sign(&voucher);
+        let result = ctx.controller.try_buy(voucher, signature);
+
+        // Then it should fail.
+        assert_eq!(
+            result,
+            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+        );
+    }
+
+    #[test]
+    fn test_renew_require_not_paused() {
+        let mut ctx = TestContext::install_and_setup();
+        // Given a paused contract.
+        ctx.controller.pause();
+        assert!(ctx.controller.is_paused());
+
+        // When a user tries to renew a name.
+        ctx.set_caller(ctx.alice);
+        let voucher = RenewalPaymentVoucher::new(
+            U512::from(2000),
+            "id_1",
+            ctx.alice,
+            vec![TokenRenewalInfo::new(
+                generate_token_id(TOKEN_NAME),
+                ctx.token_expiration_time(),
+            )],
+            ctx.token_expiration_time(),
+        );
+        let signature = ctx.sign(&voucher);
+        let result = ctx.controller.try_renew(voucher, signature);
+
+        // Then it should fail.
+        assert_eq!(
+            result,
+            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+        );
+    }
+
+    #[test]
+    fn test_buy_and_renew_require_not_paused() {
+        let mut ctx = TestContext::install_and_setup();
+        // Given a paused contract.
+        ctx.controller.pause();
+        assert!(ctx.controller.is_paused());
+
+        // When a user tries to buy and renew names.
+        ctx.set_caller(ctx.alice);
+        let payment_voucher = PaymentVoucher::new(
+            U512::from(2000),
+            "id_1",
+            ctx.alice,
+            vec![NameMintInfo::new(
+                TOKEN_NAME,
+                ctx.alice,
+                ctx.token_expiration_time(),
+                "",
+            )],
+            ctx.token_expiration_time(),
+        );
+        let renewal_voucher = RenewalPaymentVoucher::new(
+            U512::from(2000),
+            "id_2",
+            ctx.alice,
+            vec![TokenRenewalInfo::new(
+                generate_token_id(TOKEN_NAME),
+                ctx.token_expiration_time(),
+            )],
+            ctx.token_expiration_time(),
+        );
+        let payment_signature = ctx.sign(&payment_voucher);
+        let renewal_signature = ctx.sign(&renewal_voucher);
+        let result = ctx.controller.try_buy_and_renew(
+            payment_voucher,
+            payment_signature,
+            renewal_voucher,
+            renewal_signature,
+        );
+
+        // Then it should fail.
+        assert_eq!(
+            result,
+            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+        );
+    }
+
+    #[test]
+    fn test_set_signer_public_key() {
+        let mut ctx = TestContext::install_and_setup();
+        // Given a contract with an admin and a user.
+        let (admin, user) = (ctx.admin, ctx.alice);
+        // When the admin sets the signer public key.
+        ctx.set_caller(admin);
+        let result = ctx
+            .controller
+            .try_set_signer_public_key(ctx.env.public_key(&user));
+        // Then it should succeed and emit an event.
+        assert!(result.is_ok());
+        assert!(ctx
+            .env
+            .emitted(&ctx.controller, SignerPublicKeyChanged::name()));
+
+        // When a non-admin tries to set the signer public key.
+        ctx.set_caller(user);
+        let result = ctx
+            .controller
+            .try_set_signer_public_key(ctx.env.public_key(&user));
+        // Then it should fail.
+        assert!(result.is_err());
+    }
+
+    #[test]
+    fn test_set_treasury() {
+        let mut ctx = TestContext::install_and_setup();
+        // Given a contract with an admin and two users.
+        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
+        // When the admin sets the treasury address.
+        ctx.set_caller(admin);
+        let result = ctx.controller.try_set_treasury(alice);
+        // Then it should succeed and emit an event.
+        assert!(result.is_ok());
+        assert!(ctx
+            .env
+            .emitted(&ctx.controller, TreasuryAddressChanged::name()));
+
+        // When a non-admin tries to set the treasury address.
+        ctx.set_caller(alice);
+        let result = ctx.controller.try_set_treasury(bob);
+        // Then it should fail.
+        assert!(result.is_err());
+    }
 }
 
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/marketplace.rs.html b/docs/src/casper_name_contracts/contracts/marketplace.rs.html index e6618fd..1b92876 100644 --- a/docs/src/casper_name_contracts/contracts/marketplace.rs.html +++ b/docs/src/casper_name_contracts/contracts/marketplace.rs.html @@ -1,4 +1,5 @@ -marketplace.rs - source
1
+marketplace.rs - source

casper_name_contracts/contracts/
marketplace.rs

+1
 2
 3
 4
@@ -55,17 +56,41 @@
 55
 56
 57
-
use odra::{
-    args::Maybe,
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
use odra::{
     casper_types::{bytesrepr::Bytes, PublicKey},
     prelude::*,
-    Address, External, SubModule, UnwrapOrRevert,
 };
 use odra_modules::access::Role;
 
-use crate::data_structures::SecondarySaleVoucher;
+use crate::{
+    contracts::{controller::ControllerError, token_id::ToTokenId},
+    data_structures::SecondarySaleVoucher,
+};
 
-use super::{controller::BaseController, name_token::NameTokenContractRef, utils};
+use super::{controller::BaseController, name_token::NameTokenContractRef};
 
 /// Secondary market smart contract. It handles the secondary market operations.
 #[odra::module]
@@ -84,12 +109,18 @@
             fn set_signer_public_key(&mut self, signer: PublicKey);
             fn set_treasury(&mut self, treasury: Address);
             fn signer_public_key(&self) -> PublicKey;
+            fn pause(&mut self);
+            fn unpause(&mut self);
+            fn is_paused(&self) -> bool;
         }
     }
 
     /// Initializes the secondary market with the signer public key, the treasury
     /// address and the name token contract address.
     pub fn init(&mut self, signer: PublicKey, treasury: Address, name_token: Address) {
+        if !name_token.is_contract() {
+            self.revert(ControllerError::ContractAddressExpected);
+        }
         self.controller.init(signer, treasury);
         self.name_token.set(name_token);
     }
@@ -97,19 +128,36 @@
     /// Payable. Buys name tokens from the secondary market.
     #[odra(payable)]
     pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes) {
+        self.controller.require_not_paused();
         self.controller.process_payment_voucher(&voucher, signature);
         for name in voucher.names {
-            let token_hash = self.compute_namehash(&name.label);
-            let target_key = self.env().caller();
-            let source_key = name.owner;
-            self.name_token
-                .transfer(Maybe::None, Maybe::Some(token_hash), source_key, target_key);
+            let token_id = self.token_id(name.label);
+            let to = self.env().caller();
+            let from = name.owner;
+            self.name_token.transfer_from(from, to, token_id);
         }
     }
+}
+
+#[cfg(test)]
+mod tests {
+    use crate::contracts::marketplace::{SecondaryMarket, SecondaryMarketInitArgs};
+    use odra::host::Deployer;
 
-    fn compute_namehash(&self, label: &String) -> String {
-        let hash = self.env().hash(label);
-        utils::to_utf8_string(&hash).unwrap_or_revert(self)
+    #[test]
+    fn deploy_fails_if_account_set_as_name_token() {
+        let env = odra_test::env();
+        let signer = env.get_account(10);
+        let treasury = env.get_account(11);
+        let result = SecondaryMarket::try_deploy(
+            &env,
+            SecondaryMarketInitArgs {
+                signer: env.public_key(&signer),
+                treasury,
+                name_token: env.get_account(12), // Using an account instead of a contract address
+            },
+        );
+        assert!(result.is_err());
     }
 }
 
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/mod.rs.html b/docs/src/casper_name_contracts/contracts/mod.rs.html index d20769f..f4cf452 100644 --- a/docs/src/casper_name_contracts/contracts/mod.rs.html +++ b/docs/src/casper_name_contracts/contracts/mod.rs.html @@ -1,15 +1,17 @@ -mod.rs - source
1
+mod.rs - source

casper_name_contracts/contracts/
mod.rs

+1
 2
 3
 4
 5
 6
 7
-
pub mod controller;
+8
pub mod controller;
 pub mod marketplace;
 pub mod name_token;
 pub mod registrar;
 pub mod resolver;
 pub mod reverse_resolver;
+pub mod token_id;
 pub(crate) mod utils;
 
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/name_token.rs.html b/docs/src/casper_name_contracts/contracts/name_token.rs.html index c787b83..a765bfc 100644 --- a/docs/src/casper_name_contracts/contracts/name_token.rs.html +++ b/docs/src/casper_name_contracts/contracts/name_token.rs.html @@ -1,4 +1,5 @@ -name_token.rs - source
1
+name_token.rs - source

casper_name_contracts/contracts/
name_token.rs

+1
 2
 3
 4
@@ -605,263 +606,231 @@
 605
 606
 607
-
#![allow(unused_variables)]
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
#![allow(unused_variables)]
 use crate::data_structures::NameTokenMetadata;
-use odra::args::Maybe;
+use odra::casper_types::bytesrepr::Bytes;
+use odra::casper_types::U256;
 use odra::module::Revertible;
-use odra::{prelude::*, External, UnwrapOrRevert};
-use odra::{Address, SubModule};
-use odra_modules::cep78::modalities::{
-    BurnMode, EventsMode, MetadataMutability, MintingMode, NFTHolderMode, NFTIdentifierMode,
-    NFTKind, NFTMetadataKind, OwnershipMode, WhitelistMode,
-};
-use odra_modules::cep78::token::Cep78;
+use odra::{prelude::*, ContractRef};
+use odra_modules::access::Ownable2Step;
+use odra_modules::cep95::{CEP95Interface, Cep95, Error as Cep95Error};
 
 use super::resolver::ResolverContractRef;
 
-/// NameToken contract. It is a CEP78 token with additional functionalities.
-#[odra::module]
+/// NameToken contract. It is a CEP95 token with additional functionalities.
+#[odra::module(errors = NameTokenError)]
 pub struct NameToken {
-    token: SubModule<Cep78>,
+    token: SubModule<Cep95>,
+    ownable: SubModule<Ownable2Step>,
     default_resolver: External<ResolverContractRef>,
+    max_supply: Var<u64>,
+    minted_tokens_count: Var<u64>,
+    whitelist: Mapping<Address, bool>,
 }
 
 #[odra::module]
 impl NameToken {
     delegate! {
         to self.token {
-            fn get_collection_name(&self) -> String;
-            fn get_collection_symbol(&self) -> String;
-            fn set_variables(
-                &mut self,
-                allow_minting: Maybe<bool>,
-                acl_whitelist: Maybe<Vec<Address>>,
-                operator_burn_mode: Maybe<bool>
-            );
-            fn mint(
-                &mut self,
-                token_owner: Address,
-                token_meta_data: String,
-                token_hash: Maybe<String>
-            );
-            // fn burn(&mut self, token_id: Maybe<u64>, token_hash: Maybe<String>);
-            // fn transfer(
-            //     &mut self,
-            //     token_id: Maybe<u64>,
-            //     token_hash: Maybe<String>,
-            //     source_key: Address,
-            //     target_key: Address
-            // );
-            fn approve(&mut self, spender: Address, token_id: Maybe<u64>, token_hash: Maybe<String>);
-            fn revoke(&mut self, token_id: Maybe<u64>, token_hash: Maybe<String>);
-            fn set_approval_for_all(&mut self, approve_all: bool, operator: Address);
-            fn is_approved_for_all(&mut self, token_owner: Address, operator: Address) -> bool;
-            fn owner_of(&self, token_id: Maybe<u64>, token_hash: Maybe<String>) -> Address;
-            fn get_approved(
-                &mut self,
-                token_id: Maybe<u64>,
-                token_hash: Maybe<String>
-            ) -> Option<Address>;
-            fn metadata(&self, token_id: Maybe<u64>, token_hash: Maybe<String>) -> String;
-            // fn set_token_metadata(
-            //     &mut self,
-            //     token_id: Maybe<u64>,
-            //     token_hash: Maybe<String>,
-            //     token_meta_data: String
-            // );
-            fn balance_of(&mut self, token_owner: Address) -> u64;
-            fn register_owner(&mut self, token_owner: Maybe<Address>) -> String;
+            fn name(&self) -> String;
+            fn symbol(&self) -> String;
+            fn balance_of(&self, owner: Address) -> U256;
+            fn owner_of(&self, token_id: U256) -> Option<Address>;
+            fn safe_transfer_from(&mut self, from: Address, to: Address, token_id: U256, data: Option<Bytes>);
+            fn approve(&mut self, spender: Address, token_id: U256);
+            fn revoke_approval(&mut self, token_id: U256);
+            fn approved_for(&self, token_id: U256) -> Option<Address>;
+            fn approve_for_all(&mut self, operator: Address);
+            fn revoke_approval_for_all(&mut self, operator: Address);
+            fn is_approved_for_all(&self, owner: Address, operator: Address) -> bool;
+            fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>;
         }
-    }
 
-    /// Initializes CEP78 with the given name and symbol.
-    pub fn init(&mut self, name: String, symbol: String) {
-        // Setup CEP78 token.
-        let max_total_supply = 1_000_000u64;
-        let ownership_mode = OwnershipMode::Transferable;
-        let nft_kind = NFTKind::Digital;
-        let identifier_mode = NFTIdentifierMode::Hash;
-        let nft_metadata_kind = NFTMetadataKind::Raw;
-        let metadata_mutability = MetadataMutability::Mutable;
-        let receipt_name = String::new();
-        let allow_minting = Maybe::Some(true);
-        let minting_mode = Maybe::Some(MintingMode::Acl);
-        let holder_mode = Maybe::Some(NFTHolderMode::Mixed);
-        let whitelist_mode = Maybe::Some(WhitelistMode::Unlocked);
-        let acl_white_list = Maybe::None;
-        let json_schema = Maybe::None;
-        let burn_mode = Maybe::Some(BurnMode::Burnable);
-        let operator_burn_mode = Maybe::None; // ?
-        let owner_reverse_lookup_mode = Maybe::None; // ?
-        let events_mode = Maybe::Some(EventsMode::CES);
-        let transfer_filter_contract_contract = Maybe::None; // ?
-        let additional_required_metadata = Maybe::None; // ?
-        let optional_metadata = Maybe::Some(vec![]); // ?
-        self.token.init(
-            name,
-            symbol,
-            max_total_supply,
-            ownership_mode,
-            nft_kind,
-            identifier_mode,
-            nft_metadata_kind,
-            metadata_mutability,
-            receipt_name,
-            allow_minting,
-            minting_mode,
-            holder_mode,
-            whitelist_mode,
-            acl_white_list,
-            json_schema,
-            burn_mode,
-            operator_burn_mode,
-            owner_reverse_lookup_mode,
-            events_mode,
-            transfer_filter_contract_contract,
-            additional_required_metadata,
-            optional_metadata,
-        );
+        to self.ownable {
+            fn get_owner(&self) -> Address;
+            fn get_pending_owner(&self) -> Option<Address>;
+            fn transfer_ownership(&mut self, new_owner: &Address);
+            fn accept_ownership(&mut self);
+            fn renounce_ownership(&mut self);
+        }
     }
 
-    /// Checks if a token with the given hash exists.
-    pub fn token_exists(&self, token_hash: &String) -> bool {
-        self.token.token_exists_by_hash(token_hash)
+    /// Initializes CEP95 with the given name and symbol.
+    pub fn init(&mut self, name: String, symbol: String, max_supply: u64) {
+        let caller = self.env().caller();
+
+        self.token.symbol.set(symbol);
+        self.token.name.set(name);
+        self.max_supply.set(max_supply);
+        self.ownable.init(caller);
     }
 
-    /// Only admin. Burns the token with the given hash.
-    pub fn burn(&mut self, token_id: Maybe<u64>, token_hash: Maybe<String>) {
-        if let Maybe::Some(token_hash) = token_hash {
-            let caller = self.env().caller();
-            if !self.token.is_whitelisted(&caller) {
-                self.revert(NameTokenError::NotWhitelisted);
-            }
+    pub fn token_exists(&self, token_id: U256) -> bool {
+        self.token.exists(&token_id)
+    }
 
-            // cleanup the resolver is the default resolver and update metadata
-            let mut metadata = self.wrapped_metadata(&token_hash);
-            if let Some(resolver) = metadata.resolver().unwrap_or_revert(self) {
-                if &resolver == self.default_resolver.address() {
-                    self.default_resolver.cleanup(token_hash.clone());
-                }
-            }
-            metadata.clear_resolver();
-            self._set_token_metadata(token_hash.clone(), metadata.json());
+    pub fn mint(
+        &mut self,
+        recipient: Address,
+        token_id: U256,
+        token_metadata: Vec<(String, String)>,
+    ) {
+        let caller = self.env().caller();
+        self.assert_whitelisted(&caller);
 
-            // burn the token
-            self.token.burn_token_unchecked(token_hash, caller);
-        } else {
+        let minted_tokens_count = self.minted_tokens_count.get_or_default();
+        if minted_tokens_count >= self.max_supply.get_or_default() {
+            self.revert(NameTokenError::TokenSupplyDepleted);
+        }
+        if self.token.exists(&token_id) {
             self.revert(NameTokenError::InvalidTokenIdentifier);
         }
+        // mint the token
+        self.token.mint(recipient, token_id, token_metadata);
+        // increment the minted tokens count
+        self.minted_tokens_count.set(minted_tokens_count + 1);
+    }
+
+    pub fn burn(&mut self, token_id: U256) {
+        let caller = self.env().caller();
+        self.assert_whitelisted(&caller);
+
+        // invalidate resolutions if the resolver is the default resolver and update metadata
+        let mut metadata = self.wrapped_metadata(token_id);
+        if let Some(resolver) = metadata.resolver().unwrap_or_revert(self) {
+            if &resolver == self.default_resolver.address() {
+                self.default_resolver.invalidate_resolutions(token_id);
+            }
+        }
+        metadata.clear_resolver();
+        self.set_token_metadata(token_id, metadata.to_vec());
+
+        // burn the token
+        self.token.burn(token_id);
     }
 
-    /// Only admin. Transfer tokens to the given recipient.
-    pub fn admin_transfer(&mut self, recipient: Address, token_hashes: Vec<String>) {
+    pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>) {
         let caller = self.env().caller();
-        self.assert_is_whitelisted(&caller);
+        self.assert_whitelisted(&caller);
 
-        for token_hash in token_hashes {
-            let owner = self.token.owner_of_by_id(&token_hash);
-            if !self.is_token_valid(&token_hash) {
+        for token_id in token_ids {
+            if !self.is_token_valid(token_id) {
                 self.revert(NameTokenError::ExpiredTokenTransfer);
             }
+
+            let owner = self
+                .token
+                .owner_of(token_id)
+                .unwrap_or_revert_with(self, Cep95Error::ValueNotSet);
+            self.token.raw_transfer_from(owner, recipient, token_id);
             // if called by an operator
             if caller != owner {
-                self.cleanup(token_hash.clone());
-                self.token
-                    .transfer_unchecked(token_hash.clone(), owner, Some(caller), recipient);
-                // make sure there were no previous records for the new owner
-                self.default_resolver.cleanup(token_hash);
-            } else {
-                self.token
-                    .transfer_unchecked(token_hash.clone(), owner, Some(caller), recipient);
+                self.cleanup(token_id);
             }
         }
     }
 
-    /// Transfer token.
-    pub fn transfer(
-        &mut self,
-        token_id: Maybe<u64>,
-        token_hash: Maybe<String>,
-        source_key: Address,
-        target_key: Address,
-    ) {
-        match token_hash.clone() {
-            Maybe::Some(token_hash_value) => {
-                if !self.is_token_valid(&token_hash_value) {
-                    self.revert(NameTokenError::ExpiredTokenTransfer);
-                }
-                let caller = self.env().caller();
-                let owner = self.token.owner_of_by_id(&token_hash_value);
-                // if called by an operator cleanup the resolver if it is the default resolver.
-                if caller != owner {
-                    self.cleanup(token_hash_value.clone());
-                    self.token
-                        .transfer(token_id, token_hash, source_key, target_key);
-                    self.default_resolver.cleanup(token_hash_value);
-                } else {
-                    self.token
-                        .transfer(token_id, token_hash, source_key, target_key);
-                }
-            }
-            Maybe::None => self.revert(NameTokenError::InvalidTokenIdentifier),
+    pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256) {
+        if !self.is_token_valid(token_id) {
+            self.revert(NameTokenError::ExpiredTokenTransfer);
         }
-    }
 
-    /// Only admin. Set token's metadata.
-    pub fn set_token_metadata(
-        &mut self,
-        token_id: Maybe<u64>,
-        token_hash: Maybe<String>,
-        token_meta_data: String,
-    ) {
         let caller = self.env().caller();
-        self.assert_is_whitelisted(&caller);
-        let token_id = self
+        let owner = self
             .token
-            .token_identifier(token_id, token_hash)
-            .to_string();
-        self.token
-            .set_token_metadata_unchecked(&token_id, token_meta_data);
+            .owner_of(token_id)
+            .unwrap_or_revert_with(self, Cep95Error::ValueNotSet);
+        // if called by an operator
+        self.token.transfer_from(from, to, token_id);
+        if caller != owner {
+            self.cleanup(token_id);
+        }
     }
 
-    /// Return the metadata of the token with the given hash.
-    pub fn metadata_by_hash(&self, token_hash: String) -> String {
-        self.metadata(Maybe::None, Maybe::Some(token_hash))
+    pub fn set_token_metadata(&mut self, token_id: U256, token_metadata: Vec<(String, String)>) {
+        let caller = self.env().caller();
+        self.assert_whitelisted(&caller);
+        self.token.set_metadata(token_id, token_metadata);
     }
 
-    /// Return the resolver of the token with the given hash.
-    pub fn resolver(&self, token_hash: String) -> Option<Address> {
-        let metadata: NameTokenMetadata = self.wrapped_metadata(&token_hash);
+    pub fn resolver(&self, token_id: U256) -> Option<Address> {
+        let metadata: NameTokenMetadata = self.wrapped_metadata(token_id);
         metadata.resolver().unwrap_or_revert(self)
     }
 
-    /// Token owner only. Set the resolver of the token with the given hash.
-    pub fn set_resolver(&mut self, token_hash: String, resolver: Address) {
-        if self.token.owner_of_by_id(&token_hash) != self.env().caller() {
+    pub fn set_resolver(&mut self, token_id: U256, resolver: Address) {
+        if self.token.owner_of(token_id) != Some(self.env().caller()) {
             self.revert(NameTokenError::InvalidTokenOwner);
         }
-        let mut metadata: NameTokenMetadata = self.wrapped_metadata(&token_hash);
+        let mut metadata: NameTokenMetadata = self.wrapped_metadata(token_id);
         metadata.set_resolver(resolver);
-        self.token
-            .set_token_metadata_unchecked(&token_hash, metadata.json());
+        self.token.set_metadata(token_id, metadata.to_vec());
     }
 
-    /// Check if the address is the owner of the token with the given hash.
-    pub fn assert_is_owner(&self, token_hash: &String, address: Address) {
-        let owner = self.token.owner_of_by_id(token_hash);
-        if owner != address {
+    pub fn assert_is_owner(&self, token_id: U256, address: Address) {
+        let owner = self.token.owner_of(token_id);
+        if owner != Some(address) {
             self.revert(NameTokenError::InvalidTokenOwner);
         }
     }
 
-    /// Check if the token with the given hash is expired.
-    pub fn is_token_valid(&self, token_hash: &String) -> bool {
-        if !self.token.token_exists_by_hash(token_hash) {
+    pub fn is_token_valid(&self, token_id: U256) -> bool {
+        if !self.token.exists(&token_id) {
             return false;
         }
 
-        let metadata: NameTokenMetadata = self.wrapped_metadata(token_hash);
-        if metadata.expiration().unwrap_or_revert(self) < self.env().get_block_time() {
+        let metadata: NameTokenMetadata = self.wrapped_metadata(token_id);
+        if metadata.expiration() < self.env().get_block_time() {
             return false;
         }
         true
@@ -870,7 +839,7 @@
     /// Only admin. Set the default resolver.
     pub fn set_default_resolver(&mut self, resolver: Address) {
         let caller = self.env().caller();
-        self.assert_is_whitelisted(&caller);
+        self.assert_whitelisted(&caller);
         if !resolver.is_contract() {
             self.revert(NameTokenError::InvalidResolver);
         }
@@ -881,37 +850,54 @@
     pub fn get_default_resolver(&self) -> Address {
         *self.default_resolver.address()
     }
+
+    pub fn whitelist(&mut self, address: Address) {
+        let caller = self.env().caller();
+        self.ownable.assert_owner(&caller);
+        if self.is_whitelisted(&address) {
+            self.revert(NameTokenError::WhitelistedAlready);
+        }
+        self.whitelist.set(&address, true);
+    }
+
+    pub fn revoke_whitelist(&mut self, address: Address) {
+        let caller = self.env().caller();
+        self.ownable.assert_owner(&caller);
+        if !self.is_whitelisted(&address) {
+            self.revert(NameTokenError::NotWhitelisted);
+        }
+        self.whitelist.set(&address, false);
+    }
 }
 
 impl NameToken {
     #[inline]
-    pub fn wrapped_metadata(&self, token_hash: &str) -> NameTokenMetadata {
-        self.metadata_by_hash(token_hash.to_owned())
-            .try_into()
-            .unwrap_or_revert(self)
+    pub fn wrapped_metadata(&self, token_id: U256) -> NameTokenMetadata {
+        let metadata = self.token.token_metadata(token_id);
+        NameTokenMetadata::try_from(metadata).unwrap_or_revert(self)
     }
 
     #[inline]
-    fn assert_is_whitelisted(&self, address: &Address) {
-        if !self.token.is_whitelisted(address) {
-            self.revert(NameTokenError::NotWhitelisted);
-        }
+    fn is_whitelisted(&self, address: &Address) -> bool {
+        self.whitelist.get(address).unwrap_or_default()
     }
 
-    fn _set_token_metadata(&mut self, token_hash: String, json: String) {
-        self.set_token_metadata(Maybe::None, Maybe::Some(token_hash), json);
+    #[inline]
+    fn assert_whitelisted(&self, address: &Address) {
+        if !self.is_whitelisted(address) {
+            self.revert(NameTokenError::NotWhitelisted);
+        }
     }
 
-    fn cleanup(&mut self, token_hash: String) {
-        let mut metadata = self.wrapped_metadata(&token_hash);
+    fn cleanup(&mut self, token_id: U256) {
+        let mut metadata = self.wrapped_metadata(token_id);
         let resolver = metadata.resolver().unwrap_or_revert(self);
-        if resolver == Some(*self.default_resolver.address()) {
-            self.default_resolver.cleanup(token_hash);
-        } else {
-            let default_resolver = *self.default_resolver.address();
-            metadata.set_resolver(default_resolver);
-            self._set_token_metadata(token_hash.clone(), metadata.json());
+        let default_resolver_address = *self.default_resolver.address();
+        if resolver != Some(default_resolver_address) {
+            metadata.set_resolver(default_resolver_address);
+            self.token.set_metadata(token_id, metadata.to_vec());
         }
+        self.default_resolver.invalidate_resolutions(token_id);
     }
 }
 
@@ -922,35 +908,57 @@
     ExpiredTokenTransfer = 1303,
     InvalidTokenIdentifier = 1304,
     InvalidResolver = 1305,
+    TokenSupplyDepleted = 1306,
+    WhitelistedAlready = 1307,
 }
 
 #[cfg(test)]
 mod tests {
-    use odra::{casper_types::ContractPackageHash, OdraResult};
-
     use super::*;
-    use crate::test_context::{TestContext, INIT_TIME, TOKEN_EXPIRATION};
+    use crate::test_context::{generate_token_id, TestContext, INIT_TIME, TOKEN_EXPIRATION};
+
+    #[test]
+    fn test_supply_depletion() {
+        // Given a token with max supply of 10
+        let max_supply = 10u64;
+        let mut ctx = TestContext::install_raw_with_supply(max_supply);
+        ctx.whitelist_admin_in_name_token();
+        let token_hash = "token_hash";
+
+        for i in 0..max_supply {
+            // When minting a token
+            ctx.token.mint(ctx.alice, i.into(), vec![]);
+        }
+        // When trying to mint a new token
+        let result = ctx.token.try_mint(ctx.alice, max_supply.into(), vec![]);
+        // Then it should fail with TokenSupplyDepleted error
+        assert_eq!(
+            result.unwrap_err(),
+            NameTokenError::TokenSupplyDepleted.into()
+        );
+    }
 
     #[test]
     fn test_token_exists() {
         let mut ctx = TestContext::install_raw();
         ctx.whitelist_admin_in_name_token();
         let token_hash = "token_hash";
+        let token_id = generate_token_id(token_hash);
         // Token should not exist
-        assert_eq!(ctx.token.token_exists(&token_hash.to_string()), false);
+        assert_eq!(ctx.token.token_exists(token_id), false);
 
         // Mint a token
         let token_owner = ctx.alice;
         mint_for(&mut ctx, token_owner, token_hash);
         // Then the token should exist
-        assert_eq!(ctx.token.token_exists(&token_hash.to_string()), true);
+        assert_eq!(ctx.token.token_exists(token_id), true);
 
         // Burn the token
         whitelist_accounts(&mut ctx, vec![token_owner]);
         ctx.set_caller(token_owner);
         assert!(try_burn(&mut ctx, token_hash).is_ok());
         // Then the token should not exist anymore
-        assert_eq!(ctx.token.token_exists(&token_hash.to_string()), false);
+        assert_eq!(ctx.token.token_exists(token_id), false);
     }
 
     #[test]
@@ -959,6 +967,7 @@
         ctx.whitelist_admin_in_name_token();
         // Given a token owned by alice
         let token_hash = "token_hash";
+        let token_id = generate_token_id(token_hash);
         let token_owner = ctx.alice;
         mint_for(&mut ctx, token_owner, token_hash);
 
@@ -1004,10 +1013,11 @@
         // Given a token owned by alice
         let alice = ctx.alice;
         let token_hash = "token hash";
+        let token_id = generate_token_id(token_hash);
         mint_for(&mut ctx, alice, token_hash);
         // When whitelist the token owner
         whitelist_accounts(&mut ctx, vec![alice]);
-        assert!(ctx.token.token_exists(&token_hash.to_string()));
+        assert!(ctx.token.token_exists(token_id));
         ctx.set_caller(alice);
         // Then the token owner should be able to burn the token
         assert!(try_burn(&mut ctx, token_hash).is_ok());
@@ -1021,7 +1031,8 @@
         let alice = ctx.alice;
         // Given a non existent token
         let token_hash = "token hash";
-        assert!(!ctx.token.token_exists(&token_hash.to_string()));
+        let token_id = generate_token_id(token_hash);
+        assert!(!ctx.token.token_exists(token_id));
 
         // Then burning the token should fail
         whitelist_accounts(&mut ctx, vec![alice]);
@@ -1036,16 +1047,20 @@
         let (alice, bob) = (ctx.alice, ctx.bob);
         // Given two tokens owned by alice
         let token_hashes = vec!["token_hash1".to_string(), "token_hash2".to_string()];
+        let token_ids = token_hashes
+            .iter()
+            .map(|token_hash| generate_token_id(token_hash))
+            .collect::<Vec<_>>();
         mint_for(&mut ctx, alice, &token_hashes[0]);
         mint_for(&mut ctx, alice, &token_hashes[1]);
 
         // When admin transfer the tokens to bob
         whitelist_accounts(&mut ctx, vec![alice]);
         ctx.set_caller(alice);
-        ctx.token.admin_transfer(bob, token_hashes.clone());
+        ctx.token.admin_transfer(bob, token_ids.clone());
         // Then bob should be the owner of the tokens
-        assert!(ctx.token.try_assert_is_owner(&token_hashes[0], bob).is_ok());
-        assert!(ctx.token.try_assert_is_owner(&token_hashes[1], bob).is_ok());
+        assert!(ctx.token.try_assert_is_owner(token_ids[0], bob).is_ok());
+        assert!(ctx.token.try_assert_is_owner(token_ids[1], bob).is_ok());
     }
 
     #[test]
@@ -1055,25 +1070,23 @@
         let (alice, bob) = (ctx.alice, ctx.bob);
         // Given two tokens owned by alice
         let token_hashes = vec!["token_hash1".to_string(), "token_hash2".to_string()];
+        let token_ids = token_hashes
+            .iter()
+            .map(|token_hash| generate_token_id(token_hash))
+            .collect::<Vec<_>>();
         mint_for(&mut ctx, alice, &token_hashes[0]);
         mint_for(&mut ctx, alice, &token_hashes[1]);
 
         // When non whitelisted account tries to transfer the tokens
         ctx.set_caller(alice);
         assert_eq!(
-            ctx.token.try_admin_transfer(bob, token_hashes.clone()),
+            ctx.token.try_admin_transfer(bob, token_ids.clone()),
             Err(NameTokenError::NotWhitelisted.into())
         );
 
         // Then bob should not be the owner of the tokens
-        assert!(ctx
-            .token
-            .try_assert_is_owner(&token_hashes[0], bob)
-            .is_err());
-        assert!(ctx
-            .token
-            .try_assert_is_owner(&token_hashes[1], bob)
-            .is_err());
+        assert!(ctx.token.try_assert_is_owner(token_ids[0], bob).is_err());
+        assert!(ctx.token.try_assert_is_owner(token_ids[1], bob).is_err());
     }
 
     #[test]
@@ -1087,6 +1100,10 @@
             "token_hash2".to_string(),
             "token_hash3".to_string(),
         ];
+        let token_ids = token_hashes
+            .iter()
+            .map(|token_hash| generate_token_id(token_hash))
+            .collect::<Vec<_>>();
         mint_for(&mut ctx, alice, &token_hashes[0]);
         mint_for(&mut ctx, alice, &token_hashes[1]);
 
@@ -1096,17 +1113,11 @@
         // Then the transfer fails
         assert!(ctx
             .token
-            .try_admin_transfer(bob, token_hashes.clone())
+            .try_admin_transfer(bob, token_ids.clone())
             .is_err());
         // Then the existing tokens should not be transferred
-        assert!(ctx
-            .token
-            .try_assert_is_owner(&token_hashes[0], bob)
-            .is_err());
-        assert!(ctx
-            .token
-            .try_assert_is_owner(&token_hashes[1], bob)
-            .is_err());
+        assert!(ctx.token.try_assert_is_owner(token_ids[0], bob).is_err());
+        assert!(ctx.token.try_assert_is_owner(token_ids[1], bob).is_err());
     }
 
     #[test]
@@ -1116,23 +1127,24 @@
         let (alice, bob) = (ctx.alice, ctx.bob);
         // Given a token owned by alice
         let token_hash = "token_hash";
+        let token_id = generate_token_id(token_hash);
         mint_for(&mut ctx, alice, token_hash);
         // Then the token has no resolver
-        assert_eq!(ctx.token.resolver(token_hash.to_owned()), None);
+        assert_eq!(ctx.token.resolver(token_id), None);
 
         // When bob tries to set the resolver
         let resolver = bob;
         ctx.set_caller(bob);
         // Then the operation should fail
         assert_eq!(
-            ctx.token.try_set_resolver(token_hash.to_owned(), resolver),
+            ctx.token.try_set_resolver(token_id, resolver),
             Err(NameTokenError::InvalidTokenOwner.into())
         );
         // When alice sets the resolver
         ctx.set_caller(alice);
-        ctx.token.set_resolver(token_hash.to_owned(), resolver);
+        ctx.token.set_resolver(token_id, resolver);
         // Then the resolver should be set
-        assert_eq!(ctx.token.resolver(token_hash.to_owned()), Some(resolver));
+        assert_eq!(ctx.token.resolver(token_id), Some(resolver));
     }
 
     #[test]
@@ -1142,18 +1154,20 @@
         let alice = ctx.alice;
 
         // Given a token with expiration time in furure
-        let name = "token hash";
+        let token_hash = "token_hash";
+        let token_id = generate_token_id(token_hash);
         let expiration = INIT_TIME + 100;
+        let asset_uri = "https://example.com/asset";
         ctx.set_caller(ctx.admin);
-        let token_meta_data = NameTokenMetadata::with_no_resolver(name, expiration);
-        ctx.token
-            .mint(alice, token_meta_data.json(), Maybe::Some(name.to_owned()));
+        let token_meta_data =
+            NameTokenMetadata::with_no_resolver(token_hash, expiration, asset_uri);
+        ctx.token.mint(alice, token_id, token_meta_data.to_vec());
         // Then the token should be valid
-        assert!(ctx.token.is_token_valid(&name.to_string()));
+        assert!(ctx.token.is_token_valid(token_id));
         // When the expiration time is passed
         ctx.advance_block_time(expiration + 1);
         // Then the token should not be valid
-        assert!(!ctx.token.is_token_valid(&name.to_string()));
+        assert!(!ctx.token.is_token_valid(token_id));
     }
 
     #[test]
@@ -1164,27 +1178,30 @@
 
         // Given a token with expiration time in furure
         let name = "token hash";
+        let token_id = generate_token_id(name);
         let expiration = INIT_TIME + 100;
+        let asset_uri = "https://example.com/asset";
         ctx.set_caller(ctx.admin);
-        let token_meta_data = NameTokenMetadata::with_no_resolver(name, expiration);
-        ctx.token
-            .mint(alice, token_meta_data.json(), Maybe::Some(name.to_owned()));
+        let token_meta_data = NameTokenMetadata::with_no_resolver(name, expiration, asset_uri);
+        ctx.token.mint(alice, token_id, token_meta_data.to_vec());
         // Then the token should be valid
-        assert!(ctx.token.is_token_valid(&name.to_string()));
+        assert!(ctx.token.is_token_valid(token_id));
 
         // When the token is burnt
         whitelist_accounts(&mut ctx, vec![alice]);
         ctx.set_caller(alice);
         assert!(try_burn(&mut ctx, name).is_ok());
         // Then the token should not be valid
-        assert!(!ctx.token.is_token_valid(&name.to_string()));
+        assert!(!ctx.token.is_token_valid(token_id));
     }
 
     #[test]
     fn only_whitelisted_user_can_set_default_resolver() {
         let mut ctx = TestContext::install_raw();
 
-        let resolver = Address::Contract(ContractPackageHash::new([0u8; 32]));
+        let resolver =
+            Address::new("hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a")
+                .unwrap();
         assert!(ctx.token.try_set_default_resolver(resolver).is_err());
 
         ctx.whitelist_admin_in_name_token();
@@ -1193,23 +1210,108 @@
         assert_eq!(ctx.token.get_default_resolver(), resolver);
     }
 
-    fn mint_for(ctx: &mut TestContext, owner: Address, name: &str) {
+    #[test]
+    fn transfer_from_operator_resets_resolver() {
+        let mut ctx = TestContext::install_and_setup();
+        let (alice, bob, anyone) = (ctx.alice, ctx.bob, ctx.anyone);
+        let token_label = "token-label";
+        let full_domain = format!("{}.cspr", token_label);
+
+        // Given Alice has a token.
+        mint_for(&mut ctx, alice, token_label);
+
+        // Alice sets the resolver.
+        ctx.set_caller(alice);
+        ctx.default_resolver
+            .set_resolution(full_domain.clone(), Some(anyone));
+
+        // Then the resolver points at some address.
+        assert_eq!(
+            ctx.default_resolver.resolve(full_domain.clone()),
+            Some(anyone)
+        );
+
+        // Given Alice sets Bob as an operator.
+        ctx.token.approve_for_all(bob);
+
+        // Then Bob is an operator for Alice.
+        assert!(ctx.token.is_approved_for_all(alice, bob));
+
+        // When Bob transfers the token to himself.
+        let token_id = generate_token_id(token_label);
+        ctx.set_caller(bob);
+        ctx.token.transfer_from(alice, bob, token_id);
+        assert!(ctx.token.try_assert_is_owner(token_id, bob).is_ok());
+
+        // Then the resolver is reset.
+        assert_eq!(
+            ctx.default_resolver.resolve(full_domain),
+            None,
+            "Resolver should be reset after transfer from operator"
+        );
+    }
+
+    #[test]
+    fn test_revoke_whitelist() {
+        let mut ctx = TestContext::install_raw();
+        ctx.whitelist_admin_in_name_token();
+        let alice = ctx.alice;
+
+        // Given Alice is whitelisted
+        whitelist_accounts(&mut ctx, vec![alice]);
+
+        // When admin revokes Alice's whitelist
+        ctx.set_caller(ctx.admin);
+        let result = ctx.token.try_revoke_whitelist(alice);
+        // Then it should succeed
+        assert!(result.is_ok());
+
+        // When admin tries to revoke Alice's whitelist again
+        let result = ctx.token.try_revoke_whitelist(alice);
+        // Then it should fail with NotWhitelisted error
+        assert_eq!(result.err(), Some(NameTokenError::NotWhitelisted.into()));
+    }
+
+    #[test]
+    fn test_whitelist() {
+        let mut ctx = TestContext::install_raw();
+        ctx.whitelist_admin_in_name_token();
+        let alice = ctx.alice;
+
+        // When admin tries to whitelist Alice
+        ctx.set_caller(ctx.admin);
+        let result = ctx.token.try_whitelist(alice);
+        // Then it should succeed
+        assert!(result.is_ok());
+
+        // When admin tries to whitelist Alice again
+        let result = ctx.token.try_whitelist(alice);
+        // Then it should fail with WhitelistedAlready error
+        assert_eq!(
+            result.err(),
+            Some(NameTokenError::WhitelistedAlready.into())
+        );
+    }
+
+    fn mint_for(ctx: &mut TestContext, owner: Address, name: &str) -> U256 {
         ctx.set_caller(ctx.admin);
-        let token_meta_data =
-            NameTokenMetadata::with_no_resolver(name, INIT_TIME + TOKEN_EXPIRATION);
-        ctx.token
-            .mint(owner, token_meta_data.json(), Maybe::Some(name.to_owned()));
+        let token_metadata =
+            NameTokenMetadata::with_no_resolver(name, INIT_TIME + TOKEN_EXPIRATION, "");
+        let token_id = generate_token_id(name);
+        ctx.token.mint(owner, token_id, token_metadata.to_vec());
+        token_id
     }
 
     fn whitelist_accounts(ctx: &mut TestContext, accounts: Vec<Address>) {
         ctx.set_caller(ctx.admin);
-        ctx.token
-            .set_variables(Maybe::None, Maybe::Some(accounts), Maybe::None);
+        for account in accounts {
+            ctx.token.whitelist(account);
+        }
     }
 
     fn try_burn(ctx: &mut TestContext, token_hash: &str) -> OdraResult<()> {
-        ctx.token
-            .try_burn(Maybe::None, Maybe::Some(token_hash.to_owned()))
+        let token_id = generate_token_id(token_hash);
+        ctx.token.try_burn(token_id)
     }
 }
 
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/registrar.rs.html b/docs/src/casper_name_contracts/contracts/registrar.rs.html index 77c063c..7a8b3d1 100644 --- a/docs/src/casper_name_contracts/contracts/registrar.rs.html +++ b/docs/src/casper_name_contracts/contracts/registrar.rs.html @@ -1,4 +1,5 @@ -registrar.rs - source
1
+registrar.rs - source

casper_name_contracts/contracts/
registrar.rs

+1
 2
 3
 4
@@ -820,17 +821,194 @@
 820
 821
 822
-
use core::ops::DerefMut;
-
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
use core::ops::DerefMut;
+use odra::casper_types::U256;
 use odra::module::Revertible;
-use odra::{args::Maybe, module::Module, Address, SubModule, UnwrapOrRevert, Var};
-use odra::{prelude::*, External};
+use odra::prelude::*;
+use odra::ContractRef;
 use odra_modules::access::{AccessControl, Role, DEFAULT_ADMIN_ROLE};
+use odra_modules::security::Pauseable;
 
-use crate::data_structures::{ExpirableVoucher, NameMintInfo, RenewalVoucher, TokenRenewalInfo};
 use crate::{
-    contracts::name_token::NameTokenContractRef,
-    data_structures::{NameTokenMetadata, TokenizationVoucher},
+    contracts::{name_token::NameTokenContractRef, token_id::ToTokenId},
+    data_structures::{
+        ExpirableVoucher, NameMintInfo, NameTokenMetadata, RenewalVoucher, TokenRenewalInfo,
+        TokenizationVoucher,
+    },
 };
 
 use super::resolver::ResolverContractRef;
@@ -838,14 +1016,22 @@
 
 pub const CONTROLLER_ROLE: Role = [2u8; 32];
 // Reminting should be possible after 5 days.
-const PENDING_DELETE_PERIOD: u64 = 5 * 24 * 60 * 60 * 1000;
+const PENDING_DELETE_PERIOD: u64 = 5 * 24 * 60 * 60 * 1000; // 5 days
+const MAX_GRACE_PERIOD: u64 = 365 * 24 * 60 * 60 * 1000; // 365 days
+
+/// Event emitted when the grace period is changed.
+#[odra::event]
+pub struct GracePeriodChanged {
+    new_grace_period: u64,
+}
 
 /// Registrar smart contract. It handles the registration and expiration of name tokens.
-#[odra::module]
-pub struct Registrar {
+#[odra::module(errors = RegistrarError, events = [GracePeriodChanged])]
+pub struct Registrar {
     name_token: External<NameTokenContractRef>,
     access_control: SubModule<AccessControl>,
     grace_period: Var<u64>,
+    pauseable: SubModule<Pauseable>,
 }
 
 #[odra::module]
@@ -856,10 +1042,17 @@
             fn grant_role(&mut self, role: &Role, address: &Address);
             fn revoke_role(&mut self, role: &Role, address: &Address);
         }
+
+        to self.pauseable {
+            fn is_paused(&self) -> bool;
+        }
     }
 
     /// Initializes the registrar with the name token contract address.
     pub fn init(&mut self, name_token: Address) {
+        if !name_token.is_contract() {
+            self.revert(RegistrarError::NameTokenIsNotValid);
+        }
         let caller = self.env().caller();
 
         // Set NameToken address.
@@ -872,13 +1065,21 @@
         self.access_control
             .unchecked_grant_role(&DEFAULT_ADMIN_ROLE, &caller);
         self.access_control
-            .set_admin_role(&CONTROLLER_ROLE, &DEFAULT_ADMIN_ROLE);
-
-        // Consider removing this line.
-        self.access_control
             .unchecked_grant_role(&CONTROLLER_ROLE, &caller);
     }
 
+    /// Temporarily stops the contract.
+    pub fn pause(&mut self) {
+        self.assert_caller_is_admin();
+        self.pauseable.pause();
+    }
+
+    /// Returns to normal operation.
+    pub fn unpause(&mut self) {
+        self.assert_caller_is_admin();
+        self.pauseable.unpause();
+    }
+
     /// Returns the grace period.
     pub fn grace_period(&self) -> u64 {
         self.grace_period.get().unwrap_or_revert(self)
@@ -887,8 +1088,8 @@
     /// Try to resolve a full domain name to an address.
     pub fn resolve(&self, full_domain: String) -> Option<Address> {
         let token_name = utils::extract_token_name(&full_domain)?;
-        let token_hash = self.compute_namehash(&token_name);
-        if !self.name_token.is_token_valid(&token_hash) {
+        let token_hash = self.token_id(token_name);
+        if !self.name_token.is_token_valid(token_hash) {
             return None;
         }
 
@@ -898,33 +1099,42 @@
         }
     }
 
-    /// Expire a list of tokens if they are expired.
-    pub fn expire(&mut self, token_hashes: Vec<String>) {
+    // Public functions.
+
+    /// Expire a list of tokens if they are expired.
+    pub fn expire(&mut self, token_ids: Vec<U256>) {
+        self.pauseable.require_not_paused();
         let block_time = self.env().get_block_time();
         let grace_period = self.grace_period();
-        for token_hash in token_hashes {
-            self.expire_single(&token_hash, block_time, grace_period);
+        for token_id in token_ids {
+            self.expire_single(token_id, block_time, grace_period);
         }
     }
 
     /// Admin only. Sets the grace period.
     pub fn set_grace_period(&mut self, period: u64) {
         self.assert_caller_is_admin();
+        if period > MAX_GRACE_PERIOD {
+            self.revert(RegistrarError::GracePeriodTooLong);
+        }
         self.grace_period.set(period);
+        self.env().emit_event(GracePeriodChanged {
+            new_grace_period: period,
+        });
     }
 
     /// Admin only. Transfer ownership of a list of tokens.
-    pub fn admin_transfer(&mut self, new_owner: Address, token_hashes: Vec<String>) {
+    pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>) {
         self.assert_caller_is_admin();
-        self.name_token.admin_transfer(new_owner, token_hashes);
+        self.name_token.admin_transfer(new_owner, token_ids);
     }
 
     /// Admin only. Burn a list of tokens.
-    pub fn admin_burn(&mut self, token_hashes: Vec<String>) {
+    pub fn admin_burn(&mut self, token_ids: Vec<U256>) {
         self.assert_caller_is_admin();
         let name_token = self.name_token.deref_mut();
-        for token_hash in token_hashes {
-            burn(name_token, token_hash);
+        for id in token_ids {
+            name_token.burn(id);
         }
     }
 
@@ -953,6 +1163,7 @@
 
     /// Controller only. Prolong the expiration date of a list of tokens.
     pub fn controller_prolong(&mut self, voucher: RenewalVoucher) {
+        self.pauseable.require_not_paused();
         self.assert_caller_is_controller();
         self.assert_voucher_not_expired(&voucher);
         self.prolong(voucher.tokens);
@@ -960,6 +1171,7 @@
 
     /// Controller only. Register a list of tokens.
     pub fn controller_register(&mut self, voucher: TokenizationVoucher) {
+        self.pauseable.require_not_paused();
         self.assert_voucher_not_expired(&voucher);
         self.assert_caller_is_controller();
         self.register(voucher.names);
@@ -971,6 +1183,7 @@
         renewal_voucher: RenewalVoucher,
         tokenization_voucher: TokenizationVoucher,
     ) {
+        self.pauseable.require_not_paused();
         self.assert_caller_is_controller();
         self.assert_voucher_not_expired(&renewal_voucher);
         self.assert_voucher_not_expired(&tokenization_voucher);
@@ -1004,19 +1217,14 @@
         }
     }
 
-    fn expire_single(&mut self, token_hash: &str, block_time: u64, grace_period: u64) {
-        let metadata = self.wrapped_metadata(token_hash);
-        let token_expiration = metadata.expiration().unwrap_or_revert(self);
+    fn expire_single(&mut self, token_id: U256, block_time: u64, grace_period: u64) {
+        let metadata = self.wrapped_metadata(token_id);
+        let token_expiration = metadata.expiration();
         if self.is_token_expired(token_expiration, grace_period, block_time) {
-            burn(self.name_token.deref_mut(), token_hash.to_owned());
+            self.name_token.burn(token_id);
         }
     }
 
-    fn compute_namehash(&self, label: &String) -> String {
-        let hash = self.env().hash(label);
-        utils::to_utf8_string(&hash).unwrap_or_revert(self)
-    }
-
     #[inline]
     fn assert_token_expired(&self, token_expiration: u64, block_time: u64) {
         let grace_period = self.grace_period();
@@ -1039,9 +1247,9 @@
     }
 
     #[inline]
-    fn wrapped_metadata(&self, token_hash: &str) -> NameTokenMetadata {
+    fn wrapped_metadata(&self, token_id: U256) -> NameTokenMetadata {
         self.name_token
-            .metadata_by_hash(token_hash.to_owned())
+            .token_metadata(token_id)
             .try_into()
             .unwrap_or_revert(self)
     }
@@ -1057,19 +1265,16 @@
             // verify the new expiration date is in the future
             self.assert_token_expires_in_future(token.token_expiration, block_time);
             // Compute token hash.
-            let token_hash = self.compute_namehash(&token.token_id);
+            let token_id = token.token_id;
             // get the token metadata
-            let mut metadata = self.wrapped_metadata(&token_hash);
+            let mut metadata = self.wrapped_metadata(token_id);
             // check if the time for the renewal does not elapsed
-            let expiration = metadata.expiration().unwrap_or_revert(self);
+            let expiration = metadata.expiration();
             self.assert_in_renewal_period(expiration);
             metadata.set_expiration(token.token_expiration);
 
-            set_token_metadata(
-                self.name_token.deref_mut(),
-                token_hash,
-                metadata.json().to_string(),
-            );
+            self.name_token
+                .set_token_metadata(token_id, metadata.to_vec());
         }
     }
 
@@ -1077,61 +1282,35 @@
         let block_time = self.env().get_block_time();
         for info in names {
             self.assert_token_expires_in_future(info.token_expiration, block_time);
-
+            if !utils::is_label_valid(&info.label) {
+                self.revert(RegistrarError::TokenNameIsNotValid);
+            }
+            let metadata = NameTokenMetadata::with_resolver(
+                &info.label,
+                info.token_expiration,
+                &info.asset_uri,
+                self.name_token.get_default_resolver(),
+            );
             // Compute token hash.
-            let token_hash = self.compute_namehash(&info.label);
+            let token_id = self.token_id(info.label);
 
             // Check if token already exists.
-            let token_exists = self.name_token.token_exists(&token_hash);
+            let token_exists = self.name_token.token_exists(token_id);
 
             // If token exists and is expired and grace period is over, burn it.
             if token_exists {
-                let metadata = self.wrapped_metadata(&token_hash);
-                self.assert_token_expired(metadata.expiration().unwrap_or_revert(self), block_time);
-                burn(self.name_token.deref_mut(), token_hash.clone());
+                let metadata = self.wrapped_metadata(token_id);
+                self.assert_token_expired(metadata.expiration(), block_time);
+                self.name_token.burn(token_id);
             }
 
             // Mint token.
-            let metadata = NameTokenMetadata::with_resolver(
-                &info.label,
-                info.token_expiration,
-                self.name_token.get_default_resolver(),
-            );
-            let metadata = metadata.json();
-            mint(
-                self.name_token.deref_mut(),
-                info.owner,
-                metadata,
-                token_hash,
-            );
+            self.name_token
+                .mint(info.owner, token_id, metadata.to_vec());
         }
     }
 }
 
-#[inline]
-fn mint(
-    name_token: &mut NameTokenContractRef,
-    buyer: Address,
-    metadata: String,
-    token_hash: String,
-) {
-    name_token.mint(buyer, metadata, Maybe::Some(token_hash));
-}
-
-#[inline]
-fn set_token_metadata(
-    name_token: &mut NameTokenContractRef,
-    token_hash: String,
-    token_meta_data: String,
-) {
-    name_token.set_token_metadata(Maybe::None, Maybe::Some(token_hash), token_meta_data);
-}
-
-#[inline]
-fn burn(name_token: &mut NameTokenContractRef, token_hash: String) {
-    name_token.burn(Maybe::None, Maybe::Some(token_hash));
-}
-
 #[odra::odra_error]
 pub enum RegistrarError {
     ExpirationDateInThePast = 1201,
@@ -1139,6 +1318,9 @@
     GracePeriodExpired = 1203,
     VoucherExpired = 1204,
     TokenDoesNotExist = 1205,
+    GracePeriodTooLong = 1206,
+    NameTokenIsNotValid = 1207,
+    TokenNameIsNotValid = 1208,
 }
 
 #[cfg(test)]
@@ -1147,11 +1329,26 @@
     use crate::{
         data_structures::TokenRenewalInfo,
         test_context::{
-            blake2b, TestContext, GRACE_PERIOD, INIT_TIME, TOKEN_EXPIRATION, TOKEN_NAME,
+            generate_token_id, TestContext, GRACE_PERIOD, INIT_TIME, TOKEN_EXPIRATION, TOKEN_NAME,
         },
     };
-    use odra::{casper_types::ContractPackageHash, host::HostRef};
-    use odra_modules::{access::errors::Error as AccessControlError, cep78::events::Burn};
+    use odra::{
+        casper_event_standard::EventInstance,
+        host::{Deployer, HostRef},
+    };
+    use odra_modules::{access::errors::Error as AccessControlError, cep95::Burn};
+
+    #[test]
+    fn deploy_fails_if_account_set_as_name_token() {
+        let env = odra_test::env();
+        let result = Registrar::try_deploy(
+            &env,
+            RegistrarInitArgs {
+                name_token: env.get_account(1),
+            },
+        );
+        assert!(result.is_err());
+    }
 
     #[test]
     fn test_admin_can_manage_controller_role() {
@@ -1208,6 +1405,34 @@
         assert_eq!(reg.grace_period(), 100);
     }
 
+    #[test]
+    fn test_grace_period_too_long() {
+        let mut ctx = TestContext::install_raw();
+        let (env, reg) = (ctx.env, &mut ctx.registrar);
+        let admin = ctx.admin;
+
+        // When Admin sets too long grace period.
+        env.set_caller(admin);
+        let result = reg.try_set_grace_period(MAX_GRACE_PERIOD + 1);
+
+        // Then it fails with error.
+        assert_eq!(result, Err(RegistrarError::GracePeriodTooLong.into()));
+    }
+
+    #[test]
+    fn test_set_grace_period_emits_event() {
+        let mut ctx = TestContext::install_raw();
+        let (env, reg) = (ctx.env, &mut ctx.registrar);
+        let admin = ctx.admin;
+
+        // When Admin sets grace period.
+        env.set_caller(admin);
+        reg.set_grace_period(MAX_GRACE_PERIOD);
+
+        // Then the contract emits GracePeriodChanged event.
+        assert!(env.emitted(reg, GracePeriodChanged::name()));
+    }
+
     #[test]
     fn register_with_past_expiration_time_fails() {
         let mut ctx = TestContext::install_and_setup();
@@ -1248,6 +1473,28 @@
         assert_eq!(result, Err(RegistrarError::VoucherExpired.into()));
     }
 
+    #[test]
+    fn register_invalid_label_fails() {
+        let mut ctx = TestContext::install_and_setup();
+        let (admin, alice) = (ctx.admin, ctx.alice);
+        let invalid_name = "invalid-label-";
+
+        // When Admin tries to register an invalid label.
+        let result = ctx.try_name_register(
+            admin,
+            alice,
+            invalid_name,
+            ctx.token_expiration_time(),
+            ctx.voucher_expiration_time(),
+        );
+
+        // Then registration fails.
+        assert_eq!(
+            result.unwrap_err(),
+            OdraError::from(RegistrarError::TokenNameIsNotValid)
+        );
+    }
+
     #[test]
     fn test_register_successful_mint() {
         let mut ctx = TestContext::install_and_setup();
@@ -1312,7 +1559,6 @@
     fn register_the_same_name_after_grace_period() {
         let mut ctx = TestContext::install_and_setup();
         let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
-        let registrar_address = *ctx.registrar.address();
         // Given Alice has a token.
         ctx.with_name_registered(admin, alice, TOKEN_NAME);
 
@@ -1323,8 +1569,11 @@
         ctx.with_name_registered(admin, bob, TOKEN_NAME);
 
         // Then Alice's token is burned.
-        let event: Burn = ctx.token.get_event(-2).unwrap();
-        let expected = Burn::new(alice, blake2b(TOKEN_NAME), registrar_address);
+        let event: Burn = ctx.token.get_event(-4).unwrap();
+        let expected = Burn {
+            from: alice,
+            token_id: generate_token_id(TOKEN_NAME),
+        };
         assert_eq!(event, expected);
 
         // And Bob's token is minted.
@@ -1346,11 +1595,11 @@
         ctx.with_name_expired(TOKEN_NAME);
 
         // Then token is burned.
-        assert_eq!(ctx.token.balance_of(alice), 0);
+        assert_eq!(ctx.token.balance_of(alice), U256::zero());
     }
 
     #[test]
-    fn on_expiration_default_resolver_is_cleanup() {
+    fn on_expiration_default_resolver_is_invalidated() {
         let mut ctx = TestContext::install_and_setup();
         let (admin, alice) = (ctx.admin, ctx.alice);
 
@@ -1367,8 +1616,8 @@
             Some(alice)
         );
         assert_eq!(
-            ctx.token.resolver(blake2b(TOKEN_NAME)),
-            Some(*ctx.default_resolver.address())
+            ctx.token.resolver(generate_token_id(TOKEN_NAME)),
+            Some(ctx.default_resolver.address())
         );
 
         // And is after grace period.
@@ -1389,7 +1638,7 @@
 
         // Given Alice has 5 tokens.
         ctx.with_multi_names_registered(admin, alice, tokens.clone());
-        assert_eq!(ctx.token.balance_of(alice), 5);
+        assert_eq!(ctx.token.balance_of(alice), U256::from(5));
         // And is after grace period.
         ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + PENDING_DELETE_PERIOD + 1);
 
@@ -1397,7 +1646,7 @@
         ctx.with_names_expired(tokens);
 
         // Then all the tokens are burned.
-        assert_eq!(ctx.token.balance_of(alice), 0);
+        assert_eq!(ctx.token.balance_of(alice), U256::from(0));
     }
 
     #[test]
@@ -1411,8 +1660,8 @@
         ctx.admin_transfer(bob, vec![TOKEN_NAME]);
 
         // Then Alice's token is transferred to Bob.
-        assert_eq!(ctx.token.balance_of(alice), 0);
-        assert_eq!(ctx.token.balance_of(bob), 1);
+        assert_eq!(ctx.token.balance_of(alice), U256::from(0));
+        assert_eq!(ctx.token.balance_of(bob), U256::from(1));
     }
 
     #[test]
@@ -1433,8 +1682,8 @@
             Some(alice)
         );
         assert_eq!(
-            ctx.token.resolver(blake2b(TOKEN_NAME)),
-            Some(*ctx.default_resolver.address())
+            ctx.token.resolver(generate_token_id(TOKEN_NAME)),
+            Some(ctx.default_resolver.address())
         );
 
         ctx.admin_transfer(bob, vec![TOKEN_NAME]);
@@ -1452,11 +1701,14 @@
         ctx.with_name_registered(admin, alice, TOKEN_NAME);
 
         // And change the resolver
-        let resolver = Address::Contract(ContractPackageHash::new([1u8; 32]));
+        let resolver =
+            Address::new("hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a")
+                .unwrap();
         ctx.set_caller(alice);
-        ctx.token.set_resolver(blake2b(TOKEN_NAME), resolver);
+        ctx.token
+            .set_resolver(generate_token_id(TOKEN_NAME), resolver);
 
-        let json = ctx.token.metadata_by_hash(blake2b(TOKEN_NAME));
+        let json = ctx.token.token_metadata(generate_token_id(TOKEN_NAME));
         let actual_resolver = NameTokenMetadata::try_from(json)
             .unwrap()
             .resolver()
@@ -1466,7 +1718,7 @@
         ctx.admin_transfer(bob, vec![TOKEN_NAME]);
 
         // Then the resolution is cleared.
-        let json = ctx.token.metadata_by_hash(blake2b(TOKEN_NAME));
+        let json = ctx.token.token_metadata(generate_token_id(TOKEN_NAME));
         let actual_resolver = NameTokenMetadata::try_from(json)
             .unwrap()
             .resolver()
@@ -1485,7 +1737,7 @@
         ctx.admin_burn(vec![TOKEN_NAME]);
 
         // Then Alice's token is burned.
-        assert_eq!(ctx.token.balance_of(alice), 0);
+        assert_eq!(ctx.token.balance_of(alice), U256::from(0));
     }
 
     #[test]
@@ -1506,8 +1758,8 @@
             Some(alice)
         );
         assert_eq!(
-            ctx.token.resolver(blake2b(TOKEN_NAME)),
-            Some(*ctx.default_resolver.address())
+            ctx.token.resolver(generate_token_id(TOKEN_NAME)),
+            Some(ctx.default_resolver.address())
         );
 
         ctx.admin_burn(vec![TOKEN_NAME]);
@@ -1529,7 +1781,10 @@
 
         let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
         let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
-        let tokens = vec![TokenRenewalInfo::new(blake2b(TOKEN_NAME), token_expiration)];
+        let tokens = vec![TokenRenewalInfo::new(
+            generate_token_id(TOKEN_NAME),
+            token_expiration,
+        )];
         let voucher = RenewalVoucher::new(tokens, voucher_expiration);
         ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD - 1);
         let result = ctx.registrar.try_controller_prolong(voucher);
@@ -1538,6 +1793,33 @@
         assert_eq!(result, Err(RegistrarError::VoucherExpired.into()));
     }
 
+    #[test]
+    fn renew_when_paused_fails() {
+        let mut ctx = TestContext::install_and_setup();
+        let (admin, alice) = (ctx.admin, ctx.alice);
+
+        // Given Alice has a token.
+        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+        ctx.set_caller(admin);
+        ctx.registrar.pause();
+
+        // When Admin tries to renew the token.
+        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
+        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
+        let tokens = vec![TokenRenewalInfo::new(
+            generate_token_id(TOKEN_NAME),
+            token_expiration,
+        )];
+        let voucher = RenewalVoucher::new(tokens, voucher_expiration);
+        let result = ctx.registrar.try_controller_prolong(voucher);
+
+        // Then registration fails.
+        assert_eq!(
+            result,
+            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+        );
+    }
+
     #[test]
     fn test_renew() {
         let mut ctx = TestContext::install_and_setup();
@@ -1552,7 +1834,7 @@
         let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
         let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION + GRACE_PERIOD;
         let tokens = vec![TokenRenewalInfo::new(
-            test_token_name.to_owned(),
+            generate_token_id(test_token_name),
             token_expiration,
         )];
         let voucher = RenewalVoucher::new(tokens, voucher_expiration);
@@ -1560,13 +1842,14 @@
         ctx.registrar.controller_prolong(voucher);
 
         // Then token expiration is updated.
-        let metadata = ctx.token.metadata_by_hash(blake2b(test_token_name));
+        let metadata = ctx.token.token_metadata(generate_token_id(test_token_name));
         let expected = NameTokenMetadata::with_resolver(
             TOKEN_NAME,
             INIT_TIME + 2 * TOKEN_EXPIRATION,
-            *ctx.default_resolver.address(),
+            "",
+            ctx.default_resolver.address(),
         );
-        assert_eq!(metadata, expected.json());
+        assert_eq!(metadata, expected.to_vec());
     }
 
     #[test]
@@ -1583,7 +1866,7 @@
         let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
         let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION + GRACE_PERIOD + 1;
         let tokens = vec![TokenRenewalInfo::new(
-            test_token_name.to_string(),
+            generate_token_id(test_token_name),
             token_expiration,
         )];
         let voucher = RenewalVoucher::new(tokens, voucher_expiration);
@@ -1641,5 +1924,72 @@
         // Then the result is the token owner.
         assert_eq!(result, Some(alice));
     }
+
+    #[test]
+    fn test_controller_register_fails_when_paused() {
+        let mut ctx = TestContext::install_and_setup();
+        let (admin, alice) = (ctx.admin, ctx.alice);
+
+        // Given Alice has a token.
+        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+        ctx.set_caller(admin);
+        ctx.registrar.pause();
+
+        // When Admin tries to register the token.
+        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
+        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
+        let asset_uri = "https://example.com/asset";
+        let names = vec![NameMintInfo::new(
+            TOKEN_NAME,
+            alice,
+            token_expiration,
+            asset_uri,
+        )];
+        let voucher = TokenizationVoucher::new(names, voucher_expiration);
+        let result = ctx.registrar.try_controller_register(voucher);
+
+        // Then registration fails.
+        assert_eq!(
+            result,
+            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+        );
+    }
+
+    #[test]
+    fn test_controller_register_and_prolong_fails_when_paused() {
+        let mut ctx = TestContext::install_and_setup();
+        let (admin, alice) = (ctx.admin, ctx.alice);
+
+        // Given Alice has a token.
+        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+        ctx.set_caller(admin);
+        ctx.registrar.pause();
+
+        // When Admin tries to register the token.
+        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
+        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
+        let asset_uri = "https://example.com/asset";
+        let names = vec![NameMintInfo::new(
+            TOKEN_NAME,
+            alice,
+            token_expiration,
+            asset_uri,
+        )];
+        let tokens = vec![TokenRenewalInfo::new(
+            generate_token_id(TOKEN_NAME),
+            token_expiration,
+        )];
+        let renewal_voucher = RenewalVoucher::new(tokens, voucher_expiration);
+        let voucher = TokenizationVoucher::new(names, voucher_expiration);
+        let result = ctx
+            .registrar
+            .try_controller_prolong_and_register(renewal_voucher, voucher);
+
+        // Then registration fails.
+        assert_eq!(
+            result,
+            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+        );
+    }
 }
 
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/resolver.rs.html b/docs/src/casper_name_contracts/contracts/resolver.rs.html index d8479a1..c768c14 100644 --- a/docs/src/casper_name_contracts/contracts/resolver.rs.html +++ b/docs/src/casper_name_contracts/contracts/resolver.rs.html @@ -1,4 +1,5 @@ -resolver.rs - source
1
+resolver.rs - source

casper_name_contracts/contracts/
resolver.rs

+1
 2
 3
 4
@@ -399,12 +400,81 @@
 399
 400
 401
-
use core::ops::Deref;
-
-use odra::{args::Maybe, prelude::*, Address, External, Mapping, SubModule, UnwrapOrRevert};
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
use odra::{casper_types::U256, prelude::*};
 use odra_modules::access::{AccessControl, Role, DEFAULT_ADMIN_ROLE};
 
-use super::{name_token::NameTokenContractRef, utils};
+use super::{name_token::NameTokenContractRef, token_id::ToTokenId, utils};
 
 #[odra::external_contract]
 pub trait Resolver {
@@ -412,12 +482,12 @@
     fn set_name_token(&mut self, name_token: Address);
     fn set_resolution(&mut self, full_domain: Domain, address: Option<Address>);
     fn resolve(&self, full_domain: Domain) -> Option<Address>;
-    fn cleanup(&mut self, token_hash: TokenHash);
+    fn invalidate_resolutions(&mut self, token_id: TokenId);
 }
 
 type Nonce = u32;
 type Domain = String;
-type TokenHash = String;
+type TokenId = U256;
 
 /// Event emitted when a resolution is changed.
 #[odra::event]
@@ -429,16 +499,25 @@
 /// Event emitted when a resolution is cleared.
 #[odra::event]
 pub struct ResolutionCleared {
-    token_hash: String,
+    token_id: U256,
+}
+
+/// Event emitted when the name token address is changed.
+#[odra::event]
+pub struct NameTokenAddressChanged {
+    new_name_token: Address,
 }
 
 /// Default Resolver smart contract. It handles the resolution of domain names to addresses.
-#[odra::module(events = [ResolutionChanged, ResolutionCleared])]
+#[odra::module(
+    errors = ResolverError,
+    events = [ResolutionChanged, ResolutionCleared, NameTokenAddressChanged]
+)]
 pub struct DefaultResolver {
     access_control: SubModule<AccessControl>,
     name_token: External<NameTokenContractRef>,
-    nonces: Mapping<String, Nonce>,
-    resolutions: Mapping<(String, String, Nonce), Option<Address>>,
+    nonces: Mapping<TokenId, Nonce>,
+    resolutions: Mapping<(TokenId, String, Nonce), Option<Address>>,
 }
 
 #[odra::module]
@@ -454,6 +533,9 @@
     /// Initializes the default resolver with the name token contract address.
     /// The caller is granted the admin role.
     pub fn init(&mut self, name_token: Address) {
+        if !name_token.is_contract() {
+            self.revert(ResolverError::InvalidTokenName);
+        }
         self.name_token.set(name_token);
 
         let admin = self.env().caller();
@@ -463,32 +545,42 @@
 
     /// Admin only. Sets the name token contract address.
     pub fn set_name_token(&mut self, name_token: Address) {
+        if !name_token.is_contract() {
+            self.revert(ResolverError::InvalidTokenName);
+        }
         if !self.has_role(&DEFAULT_ADMIN_ROLE, &self.env().caller()) {
             self.env()
                 .revert(ResolverError::UnauthorizedTokenAddressUpdate);
         }
         self.name_token.set(name_token);
+        self.env().emit_event(NameTokenAddressChanged {
+            new_name_token: name_token,
+        });
     }
 
     /// Token owner only. Sets the resolution for a domain to an address.
     pub fn set_resolution(&mut self, full_domain: Domain, address: Option<Address>) {
         let env = self.env();
-        let token_hash = self
-            .calculate_token_hash(&full_domain)
+        let token_id = self
+            .extract_token_id(&full_domain)
             .unwrap_or_revert_with(self, ResolverError::InvalidDomain);
         let caller = env.caller();
 
-        if !self.name_token.is_token_valid(&token_hash) {
+        if !self.name_token.is_token_valid(token_id) {
             env.revert(ResolverError::ResolutionSetWithInvalidToken);
         }
 
-        if self.owner_of(&token_hash) != caller {
+        if self.owner_of(token_id) != Some(caller) {
             env.revert(ResolverError::ResolutionSetByInvalidOwner);
         }
 
-        let nonce = self.nonce(&token_hash);
+        if !utils::is_domain_valid(&full_domain) {
+            env.revert(ResolverError::InvalidSubdomainFormat);
+        }
+
+        let nonce = self.nonce(&token_id);
         self.resolutions
-            .set(&(token_hash, full_domain.clone(), nonce), address);
+            .set(&(token_id, full_domain.clone(), nonce), address);
 
         env.emit_event(ResolutionChanged {
             full_domain,
@@ -498,45 +590,41 @@
 
     /// Resolves a domain to an address.
     pub fn resolve(&self, full_domain: Domain) -> Option<Address> {
-        let token_hash = self.calculate_token_hash(&full_domain)?;
-        let nonce = self.nonce(&token_hash);
+        let token_id = self.extract_token_id(&full_domain)?;
+        let nonce = self.nonce(&token_id);
 
         self.resolutions
-            .get(&(token_hash, full_domain, nonce))
+            .get(&(token_id, full_domain, nonce))
             .flatten()
     }
 
-    /// Cleanup the resolutions for a token. Only the token owner or the admin can do this.
-    pub fn cleanup(&mut self, token_hash: TokenHash) {
+    /// Invalidates all the resolutions for a token. Only the token owner or the admin can do this.
+    pub fn invalidate_resolutions(&mut self, token_id: TokenId) {
         let env = self.env();
         let caller = env.caller();
 
-        if !self.has_role(&DEFAULT_ADMIN_ROLE, &caller) && self.owner_of(&token_hash) != caller {
-            self.env().revert(ResolverError::UnauthorizedCleanup);
+        if !self.has_role(&DEFAULT_ADMIN_ROLE, &caller) && self.owner_of(token_id) != Some(caller) {
+            self.env().revert(ResolverError::UnauthorizedInvalidation);
         }
-        self.nonces.add(&token_hash, 1);
+        self.nonces.add(&token_id, 1);
 
-        env.emit_event(ResolutionCleared {
-            token_hash: token_hash.deref().to_owned(),
-        });
+        env.emit_event(ResolutionCleared { token_id });
     }
 
     #[inline]
-    fn calculate_token_hash(&self, full_domain: &str) -> Option<TokenHash> {
+    fn extract_token_id(&self, full_domain: &str) -> Option<TokenId> {
         let token_name = utils::extract_token_name(&full_domain)?;
-        let hash = self.env().hash(token_name);
-        Some(utils::to_utf8_string(&hash).unwrap_or_revert(self))
+        Some(self.token_id(token_name))
     }
 
     #[inline]
-    fn nonce(&self, token_hash: &TokenHash) -> Nonce {
-        self.nonces.get_or_default(token_hash)
+    fn nonce(&self, token_id: &TokenId) -> Nonce {
+        self.nonces.get_or_default(token_id)
     }
 
     #[inline]
-    fn owner_of(&self, token_hash: &TokenHash) -> Address {
-        self.name_token
-            .owner_of(Maybe::None, Maybe::Some(token_hash.to_owned()))
+    fn owner_of(&self, token_id: TokenId) -> Option<Address> {
+        self.name_token.owner_of(token_id)
     }
 }
 
@@ -544,23 +632,38 @@
 pub enum ResolverError {
     ResolutionSetWithInvalidToken = 1401,
     ResolutionSetByInvalidOwner = 1402,
-    UnauthorizedCleanup = 1403,
+    UnauthorizedInvalidation = 1403,
     UnauthorizedTokenAddressUpdate = 1404,
     InvalidDomain = 1405,
+    InvalidSubdomainFormat = 1406,
+    InvalidTokenName = 1407,
 }
 
 #[cfg(test)]
 mod tests {
-    use odra::OdraResult;
+    use odra::{casper_event_standard::EventInstance, host::Deployer};
 
     use super::*;
-    use crate::test_context::{blake2b, TestContext, TOKEN_EXPIRATION};
+    use crate::test_context::{generate_token_id, TestContext, TOKEN_EXPIRATION};
 
     const TOKEN_NAME: &str = "odra";
     const NON_EXISTENT_TOKEN_DOMAIN: &str = "odra2.cspr";
     const NON_CSPR_DOMAIN: &str = "odra.com";
     const MAIN_DOMAIN: &str = "odra.cspr";
     const SUBDOMAIN: &str = "docs.odra.cspr";
+    const INVALID_SUBDOMAIN: &str = "-docs.odra.cspr";
+
+    #[test]
+    fn deploy_fails_if_account_set_as_name_token() {
+        let env = odra_test::env();
+        let result = DefaultResolver::try_deploy(
+            &env,
+            DefaultResolverInitArgs {
+                name_token: env.get_account(1),
+            },
+        );
+        assert!(result.is_err());
+    }
 
     #[test]
     fn deployer_is_admin() {
@@ -573,16 +676,48 @@
     #[test]
     fn only_admin_can_set_name_token() {
         let (mut ctx, admin, alice, _) = setup();
+        let contract_address = ctx.controller.address();
 
         // When alice tries to set the name token
         ctx.set_caller(alice);
         // Then the operation fails
-        assert!(ctx.default_resolver.try_set_name_token(alice).is_err());
+        assert!(ctx
+            .default_resolver
+            .try_set_name_token(contract_address)
+            .is_err());
 
         // When the admin sets the name token
         ctx.set_caller(admin);
         // Then the operation succeeds
-        assert!(ctx.default_resolver.try_set_name_token(alice).is_ok());
+        assert!(ctx
+            .default_resolver
+            .try_set_name_token(contract_address)
+            .is_ok());
+    }
+
+    #[test]
+    fn name_token_must_be_a_contract() {
+        let (mut ctx, admin, alice, _) = setup();
+
+        // When the admin tries to set a non-contract address as the name token
+        ctx.set_caller(admin);
+        let result = ctx.default_resolver.try_set_name_token(alice);
+        // Then the operation fails
+        assert_eq!(result, Err(ResolverError::InvalidTokenName.into()));
+    }
+
+    #[test]
+    fn set_name_token_emits_event() {
+        let (mut ctx, admin, _, _) = setup();
+        let name_token = ctx.token.address();
+
+        // When the admin updates the name token address.
+        ctx.set_caller(admin);
+        ctx.default_resolver.set_name_token(name_token);
+        // Then the event is emitted.
+        assert!(ctx
+            .env
+            .emitted(&ctx.default_resolver, NameTokenAddressChanged::name()))
     }
 
     #[test]
@@ -670,10 +805,7 @@
         // Given the token has been burned
         let (mut ctx, admin, alice, _) = setup();
         ctx.set_caller(admin);
-        ctx.token
-            .set_variables(Maybe::Some(true), Maybe::Some(vec![admin]), Maybe::None);
-        ctx.token
-            .burn(Maybe::None, Maybe::Some(blake2b(TOKEN_NAME)));
+        ctx.token.burn(generate_token_id(TOKEN_NAME));
         // When alice tries to set the resolution
         ctx.set_caller(alice);
         let result = try_set_resolution(&mut ctx, SUBDOMAIN, alice);
@@ -685,7 +817,18 @@
     }
 
     #[test]
-    fn cleanup_erases_subdomains() {
+    fn set_resolution_for_invalid_subdomain_format() {
+        let (mut ctx, _, alice, _) = setup();
+
+        // When alice tries to set the resolution for an invalid subdomain format
+        ctx.set_caller(alice);
+        let result = try_set_resolution(&mut ctx, INVALID_SUBDOMAIN, alice);
+        // Then the operation fails
+        assert_eq!(result, Err(ResolverError::InvalidSubdomainFormat.into()));
+    }
+
+    #[test]
+    fn invalidate_erases_subdomains() {
         let (mut ctx, _, alice, bob) = setup();
 
         // When alice sets the resolution for the main domain and a subdomain
@@ -698,7 +841,7 @@
         assert_eq!(resolve(&ctx, SUBDOMAIN), Some(bob));
 
         // When alice cleans up the token's resolutions
-        cleanup(&mut ctx, TOKEN_NAME);
+        invalidate(&mut ctx, TOKEN_NAME);
 
         // Then both resolutions are erased
         assert_eq!(resolve(&ctx, MAIN_DOMAIN), None);
@@ -706,7 +849,7 @@
     }
 
     #[test]
-    fn admin_can_cleanup_any_token() {
+    fn admin_can_invalidate_any_token() {
         let (mut ctx, admin, alice, bob) = setup();
 
         // When alice sets the resolution for the main domain and a subdomain
@@ -719,7 +862,7 @@
         assert_eq!(resolve(&ctx, SUBDOMAIN), Some(bob));
 
         // When the admin cleans up alice's token's resolutions
-        cleanup_with_caller(&mut ctx, TOKEN_NAME, admin);
+        invalidate_with_caller(&mut ctx, TOKEN_NAME, admin);
 
         // Then both resolutions are erased
         assert_eq!(resolve(&ctx, MAIN_DOMAIN), None);
@@ -727,7 +870,7 @@
     }
 
     #[test]
-    fn only_owner_or_admin_can_cleanup() {
+    fn only_owner_or_admin_can_invalidate() {
         let (mut ctx, _, alice, bob) = setup();
 
         // When alice sets the resolution for the main domain and a subdomain
@@ -741,9 +884,9 @@
 
         // When bob tries to clean up alice's token's resolutions
         ctx.set_caller(bob);
-        let result = try_cleanup(&mut ctx, TOKEN_NAME);
+        let result = try_invalidate(&mut ctx, TOKEN_NAME);
         // Then the operation fails
-        assert_eq!(result, Err(ResolverError::UnauthorizedCleanup.into()));
+        assert_eq!(result, Err(ResolverError::UnauthorizedInvalidation.into()));
     }
 
     fn setup() -> (TestContext, Address, Address, Address) {
@@ -787,17 +930,18 @@
         resolve(ctx, domain)
     }
 
-    fn cleanup(ctx: &mut TestContext, token_name: &str) {
-        try_cleanup(ctx, token_name).unwrap();
+    fn invalidate(ctx: &mut TestContext, token_name: &str) {
+        try_invalidate(ctx, token_name).unwrap();
     }
 
-    fn cleanup_with_caller(ctx: &mut TestContext, token_hash: &str, caller: Address) {
+    fn invalidate_with_caller(ctx: &mut TestContext, token_name: &str, caller: Address) {
         ctx.set_caller(caller);
-        cleanup(ctx, token_hash);
+        invalidate(ctx, token_name);
     }
 
-    fn try_cleanup(ctx: &mut TestContext, token_name: &str) -> OdraResult<()> {
-        ctx.default_resolver.try_cleanup(blake2b(token_name))
+    fn try_invalidate(ctx: &mut TestContext, token_name: &str) -> OdraResult<()> {
+        ctx.default_resolver
+            .try_invalidate_resolutions(generate_token_id(token_name))
     }
 }
 
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/reverse_resolver.rs.html b/docs/src/casper_name_contracts/contracts/reverse_resolver.rs.html index d146fec..d041cf5 100644 --- a/docs/src/casper_name_contracts/contracts/reverse_resolver.rs.html +++ b/docs/src/casper_name_contracts/contracts/reverse_resolver.rs.html @@ -1,4 +1,5 @@ -reverse_resolver.rs - source
1
+reverse_resolver.rs - source

casper_name_contracts/contracts/
reverse_resolver.rs

+1
 2
 3
 4
@@ -70,36 +71,281 @@
 70
 71
 72
-
use odra::{prelude::*, Address, Mapping};
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
use crate::contracts::{
+    name_token::NameTokenContractRef, resolver::ResolverContractRef, token_id::ToTokenId, utils,
+};
+use odra::{prelude::*, ContractRef};
+
+#[odra::odra_error]
+enum Error {
+    InvalidTokenName = 1500,
+    ResolutionForPrimaryNameNotFound = 1501,
+    InvalidResolutionAddress = 1502,
+}
 
 /// Reverse Resolver contract. It resolves primary names to addresses.
-#[odra::module(events = [PrimaryNameChanged])]
+#[odra::module(events = [PrimaryNameChanged], errors = Error)]
 pub struct ReverseResolver {
-    primary_names: Mapping<Address, String>,
+    primary_names: Mapping<Address, Option<String>>,
+    name_token: External<NameTokenContractRef>,
 }
 
 #[odra::module]
 impl ReverseResolver {
-    /// Sets the primary preffered reverse resolution address for the caller.
+    pub fn init(&mut self, name_token: Address) {
+        if !name_token.is_contract() {
+            self.revert(Error::InvalidTokenName);
+        }
+        self.name_token.set(name_token);
+    }
+
+    /// Sets the primary preferred reverse resolution address for the caller.
     pub fn set_primary_name(&mut self, primary_name: String) {
         // Load currently set primary name.
         let caller = self.env().caller();
         let current_primary_name = self.get_primary_name(&caller);
 
+        match self.existing_resolution(&primary_name) {
+            Some(address) => {
+                if address != caller {
+                    // If the resolution exists but is not for the caller, revert.
+                    self.revert(Error::InvalidResolutionAddress);
+                }
+            }
+            None => {
+                self.revert(Error::ResolutionForPrimaryNameNotFound);
+            }
+        };
+
+        if current_primary_name.as_ref() == Some(&primary_name) {
+            // If the primary name is the same, do nothing.
+            return;
+        }
+
         // Update primary name.
-        self.primary_names.set(&caller, primary_name.clone());
+        self.primary_names.set(&caller, Some(primary_name.clone()));
 
         // Emit event.
         self.env().emit_event(PrimaryNameChanged {
             address: caller,
             old_primary_name: current_primary_name,
-            new_primary_name: primary_name,
+            new_primary_name: Some(primary_name),
         });
     }
 
     /// Returns the primary name for the address.
     pub fn get_primary_name(&self, address: &Address) -> Option<String> {
-        self.primary_names.get(address)
+        let primary_name = self.primary_names.get(address).flatten()?;
+        // Check if the primary name resolves to the given address.
+        // If a resolver was cleaned up, it might not resolve anymore.
+        let resolved_address = self.existing_resolution(&primary_name)?;
+        if resolved_address == *address {
+            Some(primary_name)
+        } else {
+            None
+        }
+    }
+
+    fn existing_resolution(&self, name: &str) -> Option<Address> {
+        let token_name = utils::extract_token_name(name)?;
+        let token_id = self.token_id(token_name);
+        let resolver_address = self.name_token.resolver(token_id)?;
+        ResolverContractRef::new(self.env(), resolver_address).resolve(name.to_owned())
     }
 }
 
@@ -108,38 +354,184 @@
 pub struct PrimaryNameChanged {
     pub address: Address,
     pub old_primary_name: Option<String>,
-    pub new_primary_name: String,
+    pub new_primary_name: Option<String>,
 }
 
 #[cfg(test)]
 mod tests {
-    use odra::host::{Deployer, NoArgs};
-
     use super::*;
+    use crate::test_context::{self, TestContext};
+    use odra::host::Deployer;
+
+    const TOKEN_TEST: &str = "test";
+    const TOKEN_TEST2: &str = "test2";
+    const DOMAIN_TEST: &str = "test.cspr";
+    const DOMAIN_TEST2: &str = "test2.cspr";
 
     #[test]
     fn test_set_primary_name() {
-        let env = odra_test::env();
-        let mut resolver = ReverseResolver::deploy(&env, NoArgs);
+        let mut ctx = TestContext::install_and_setup();
+        let (admin, user) = (ctx.admin, ctx.alice);
 
-        let user = env.get_account(1);
+        let mut reverse_resolver = ReverseResolver::deploy(
+            &ctx.env,
+            ReverseResolverInitArgs {
+                name_token: ctx.token.address(),
+            },
+        );
+
+        ctx.with_name_registered(admin, user, TOKEN_TEST);
+        ctx.with_name_registered(admin, user, TOKEN_TEST2);
+
+        ctx.set_caller(user);
+        ctx.default_resolver
+            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
+        ctx.default_resolver
+            .set_resolution(DOMAIN_TEST2.to_string(), Some(user));
 
         // It should have no primary name.
-        assert_eq!(resolver.get_primary_name(&user), None);
+        assert_eq!(reverse_resolver.get_primary_name(&user), None);
 
         // Set primary name.
-        env.set_caller(user);
-        resolver.set_primary_name("test".to_string());
+        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
 
         // It should have the primary name.
-        assert_eq!(resolver.get_primary_name(&user), Some("test".to_string()));
+        assert_eq!(
+            reverse_resolver.get_primary_name(&user),
+            Some(DOMAIN_TEST.to_string())
+        );
 
         // Set new primary name.
-        env.set_caller(user);
-        resolver.set_primary_name("test2".to_string());
+        reverse_resolver.set_primary_name(DOMAIN_TEST2.to_string());
 
         // It should have the new primary name.
-        assert_eq!(resolver.get_primary_name(&user), Some("test2".to_string()));
+        assert_eq!(
+            reverse_resolver.get_primary_name(&user),
+            Some(DOMAIN_TEST2.to_string())
+        );
+    }
+
+    #[test]
+    fn test_set_same_primary_name() {
+        let mut ctx = TestContext::install_and_setup();
+        let (admin, user) = (ctx.admin, ctx.alice);
+
+        let mut reverse_resolver = ReverseResolver::deploy(
+            &ctx.env,
+            ReverseResolverInitArgs {
+                name_token: ctx.token.address(),
+            },
+        );
+
+        ctx.with_name_registered(admin, user, TOKEN_TEST);
+        ctx.with_name_registered(admin, user, TOKEN_TEST2);
+
+        ctx.set_caller(user);
+        ctx.default_resolver
+            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
+        ctx.default_resolver
+            .set_resolution(DOMAIN_TEST2.to_string(), Some(user));
+
+        // Set primary name.
+        ctx.set_caller(user);
+        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
+
+        // Set a different primary name.
+        ctx.set_caller(user);
+        reverse_resolver.set_primary_name(DOMAIN_TEST2.to_string());
+
+        // Set the same primary name again.
+        ctx.set_caller(user);
+        reverse_resolver.set_primary_name(DOMAIN_TEST2.to_string());
+
+        // The contract should not emit an event for the same primary name.
+        assert_eq!(ctx.events_count(&reverse_resolver), 2);
+    }
+
+    #[test]
+    fn test_set_name_assigned_to_someone_else() {
+        let (mut ctx, mut reverse_resolver) = setup();
+        let (admin, user) = (ctx.admin, ctx.alice);
+
+        ctx.with_name_registered(admin, user, TOKEN_TEST);
+
+        ctx.set_caller(user);
+        ctx.default_resolver
+            .set_resolution(DOMAIN_TEST.to_string(), Some(admin));
+
+        // Set primary name.
+        let result = reverse_resolver.try_set_primary_name(DOMAIN_TEST.to_string());
+        assert_eq!(result.unwrap_err(), Error::InvalidResolutionAddress.into());
+    }
+
+    #[test]
+    fn test_set_not_existing_name() {
+        let (mut ctx, mut reverse_resolver) = setup();
+        let (admin, user) = (ctx.admin, ctx.alice);
+
+        ctx.with_name_registered(admin, user, TOKEN_TEST);
+
+        // Set primary name.
+        ctx.set_caller(user);
+        let result = reverse_resolver.try_set_primary_name(DOMAIN_TEST.to_string());
+        assert_eq!(
+            result.unwrap_err(),
+            Error::ResolutionForPrimaryNameNotFound.into()
+        );
+    }
+
+    #[test]
+    fn test_get_primary_name() {
+        let (mut ctx, mut reverse_resolver) = setup();
+        let (admin, user) = (ctx.admin, ctx.alice);
+        ctx.with_name_registered(admin, user, TOKEN_TEST);
+
+        ctx.set_caller(user);
+        ctx.default_resolver
+            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
+
+        assert_eq!(reverse_resolver.get_primary_name(&user), None);
+
+        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
+        assert_eq!(
+            reverse_resolver.get_primary_name(&user),
+            Some(DOMAIN_TEST.to_string())
+        );
+    }
+
+    #[test]
+    fn test_get_primary_name_invalidated_by_resolver() {
+        let (mut ctx, mut reverse_resolver) = setup();
+        let (admin, user) = (ctx.admin, ctx.alice);
+        ctx.with_name_registered(admin, user, TOKEN_TEST);
+
+        ctx.set_caller(user);
+        ctx.default_resolver
+            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
+
+        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
+        assert_eq!(
+            reverse_resolver.get_primary_name(&user),
+            Some(DOMAIN_TEST.to_string())
+        );
+
+        // Simulate a resolver cleanup by removing the resolution.
+        ctx.default_resolver
+            .invalidate_resolutions(test_context::generate_token_id(TOKEN_TEST));
+
+        // The primary name should no longer be valid.
+        assert_eq!(reverse_resolver.get_primary_name(&user), None);
+    }
+
+    fn setup() -> (TestContext, ReverseResolverHostRef) {
+        let ctx = TestContext::install_and_setup();
+        let reverse_resolver = ReverseResolver::deploy(
+            &ctx.env,
+            ReverseResolverInitArgs {
+                name_token: ctx.token.address(),
+            },
+        );
+        (ctx, reverse_resolver)
     }
 }
 
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/token_id.rs.html b/docs/src/casper_name_contracts/contracts/token_id.rs.html new file mode 100644 index 0000000..471c292 --- /dev/null +++ b/docs/src/casper_name_contracts/contracts/token_id.rs.html @@ -0,0 +1,33 @@ +token_id.rs - source

casper_name_contracts/contracts/
token_id.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
use odra::{casper_types::U256, prelude::*};
+
+pub trait ToTokenId {
+    /// Converts the label to a token ID.
+    fn token_id(&self, label: String) -> U256;
+}
+
+impl<T> ToTokenId for T
+where
+    T: Module,
+{
+    fn token_id(&self, label: String) -> U256 {
+        let hash = self.env().hash(label);
+        U256::from(hash)
+    }
+}
+
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/utils.rs.html b/docs/src/casper_name_contracts/contracts/utils.rs.html index ee7561a..ee01d7c 100644 --- a/docs/src/casper_name_contracts/contracts/utils.rs.html +++ b/docs/src/casper_name_contracts/contracts/utils.rs.html @@ -1,4 +1,5 @@ -utils.rs - source
1
+utils.rs - source

casper_name_contracts/contracts/
utils.rs

+1
 2
 3
 4
@@ -38,17 +39,116 @@
 38
 39
 40
-
use odra::prelude::*;
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
use odra::prelude::*;
 
 const CSPR_DOMAIN: &str = ".cspr";
+const SUBDOMAIN_SEPARATOR: &str = ".";
 
-pub fn to_utf8_string(hash: &[u8]) -> Option<String> {
-    let mut result = [0u8; 64];
-    odra::utils::hex_to_slice(hash, &mut result);
-    String::from_utf8(result.to_vec()).ok()
-}
-
-pub fn extract_token_name(full_domain: &str) -> Option<String> {
+/// Extract the token name from a full domain.
+pub fn extract_token_name(full_domain: &str) -> Option<String> {
     if full_domain.ends_with(CSPR_DOMAIN) {
         let token_name = full_domain.trim_end_matches(CSPR_DOMAIN);
         token_name.split('.').last().map(|s| s.to_string())
@@ -57,6 +157,66 @@
     }
 }
 
+/// Return `true` if byte `b` is ASCII letter or digit.
+#[inline(always)]
+const fn is_alnum(b: u8) -> bool {
+    (b >= b'0' && b <= b'9') || (b >= b'a' && b <= b'z') || (b >= b'A' && b <= b'Z')
+}
+
+/// Validate a single DNS label under RFC 952/1123 (LDH rule).
+///
+/// * **length** 1–63 bytes
+/// * **characters** ASCII letters, digits, or `-`
+/// * **first/last** must be alphanumeric
+///
+/// Returns `true` for valid labels.
+#[inline]
+fn is_valid_dns_label(label: &str) -> bool {
+    let bytes = label.as_bytes();
+    let len = bytes.len();
+
+    if len == 0 || len > 63 {
+        return false;
+    }
+
+    // first & last char must be alnum
+    if !is_alnum(bytes[0]) || !is_alnum(bytes[len - 1]) {
+        return false;
+    }
+
+    // interior chars: alnum or hyphen
+    let mut i = 1;
+    while i < len - 1 {
+        let b = bytes[i];
+        if !is_alnum(b) && b != b'-' {
+            return false;
+        }
+        i += 1;
+    }
+    true
+}
+
+/// Validate a full domain with subdomains.
+/// The domain must end with `.cspr` and each subdomain must be a valid DNS label.
+pub fn is_domain_valid(full_domain: &str) -> bool {
+    if full_domain.ends_with(CSPR_DOMAIN) {
+        let token_name = full_domain.trim_end_matches(CSPR_DOMAIN);
+        token_name
+            .split(SUBDOMAIN_SEPARATOR)
+            .map(is_valid_dns_label)
+            .all(|valid| valid)
+    } else {
+        false
+    }
+}
+
+/// Validate a label for use in a Casper token name.
+/// A valid label must be a valid DNS label, not equal to "cspr", and
+/// must not contain any subdomains (i.e., no `.` character).
+pub fn is_label_valid(label: &str) -> bool {
+    is_valid_dns_label(label) && label != "cspr" && !label.contains('.')
+}
+
 #[cfg(test)]
 mod t {
     #[test]
@@ -77,5 +237,53 @@
         let token_name = super::extract_token_name(full_domain);
         assert_eq!(token_name, None);
     }
+
+    #[test]
+    fn test_is_valid_dns_label() {
+        assert!(super::is_valid_dns_label("valid-label"));
+        assert!(!super::is_valid_dns_label("-invalid-start"));
+        assert!(!super::is_valid_dns_label("invalid-end-"));
+        assert!(!super::is_valid_dns_label("invalid_char@"));
+        assert!(!super::is_valid_dns_label(
+            "too-long-label-abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
+        ));
+        assert!(super::is_valid_dns_label("valid123"));
+    }
+
+    #[test]
+    fn test_is_domain_valid() {
+        let full_domain = "odra.cspr";
+        assert!(super::is_domain_valid(full_domain));
+
+        let full_domain = "aaa.odra.cspr";
+        assert!(super::is_domain_valid(full_domain));
+
+        let full_domain = "ss.aaa.odra.cspr";
+        assert!(super::is_domain_valid(full_domain));
+
+        let full_domain = "invalid-label-.cspr";
+        assert!(!super::is_domain_valid(full_domain));
+
+        let full_domain = "invalid-label@.cspr";
+        assert!(!super::is_domain_valid(full_domain));
+
+        let full_domain =
+            "too-long-label-abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz.cspr";
+        assert!(!super::is_domain_valid(full_domain));
+
+        let full_domain = "valid123.cspr";
+        assert!(super::is_domain_valid(full_domain));
+    }
+
+    #[test]
+    fn test_is_label_valid() {
+        assert!(super::is_label_valid("valid-label"));
+        assert!(!super::is_label_valid("-invalid-start"));
+        assert!(!super::is_label_valid("invalid-end-"));
+        assert!(!super::is_label_valid("invalid_char@"));
+        assert!(!super::is_label_valid("cspr"));
+        assert!(!super::is_label_valid("invalid.label"));
+        assert!(super::is_label_valid("valid123"));
+    }
 }
 
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/data_structures.rs.html b/docs/src/casper_name_contracts/data_structures.rs.html index 44aced1..54d5e1e 100644 --- a/docs/src/casper_name_contracts/data_structures.rs.html +++ b/docs/src/casper_name_contracts/data_structures.rs.html @@ -1,4 +1,5 @@ -data_structures.rs - source
1
+data_structures.rs - source

casper_name_contracts/
data_structures.rs

+1
 2
 3
 4
@@ -317,7 +318,75 @@
 317
 318
 319
-
use odra::{casper_types::U512, prelude::*, Address, OdraResult};
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
use odra::{
+    casper_types::{U256, U512},
+    prelude::*,
+};
 use serde::{Deserialize, Serialize};
 
 /// Errors that can occur while working with name tokens.
@@ -331,6 +400,7 @@
     SLDDoesNotExist = 1005,
     SerializationError = 1006,
     DeserializationError = 1007,
+    InvalidMetadata = 1008,
 }
 
 /// Metadata associated with a name token.
@@ -339,22 +409,25 @@
     name: String,
     expiration: u64,
     resolver: Option<Address>,
+    asset_uri: String,
 }
 
 impl NameTokenMetadata {
-    pub fn with_resolver(name: &str, expiration: u64, resolver: Address) -> Self {
+    pub fn with_resolver(name: &str, expiration: u64, asset_uri: &str, resolver: Address) -> Self {
         Self {
             name: String::from(name),
             expiration,
             resolver: Some(resolver),
+            asset_uri: String::from(asset_uri),
         }
     }
 
-    pub fn with_no_resolver(name: &str, expiration: u64) -> Self {
+    pub fn with_no_resolver(name: &str, expiration: u64, asset_uri: &str) -> Self {
         Self {
             name: String::from(name),
             expiration,
             resolver: None,
+            asset_uri: String::from(asset_uri),
         }
     }
 
@@ -363,7 +436,7 @@
     }
 
     pub fn resolver(&self) -> OdraResult<Option<Address>> {
-        Ok(self.resolver.clone())
+        Ok(self.resolver)
     }
 
     pub fn clear_resolver(&mut self) {
@@ -374,8 +447,19 @@
         serde_json_wasm::to_string(&self).unwrap()
     }
 
-    pub fn expiration(&self) -> OdraResult<u64> {
-        Ok(self.expiration)
+    pub fn to_vec(&self) -> Vec<(String, String)> {
+        let mut vec = Vec::new();
+        vec.push(("asset_uri".to_string(), self.asset_uri.clone()));
+        vec.push(("expiration".to_string(), self.expiration.to_string()));
+        vec.push(("name".to_string(), self.name.clone()));
+        if let Some(resolver) = &self.resolver {
+            vec.push(("resolver".to_string(), resolver.to_string()));
+        }
+        vec
+    }
+
+    pub fn expiration(&self) -> u64 {
+        self.expiration
     }
 
     pub fn set_expiration(&mut self, expiration: u64) {
@@ -391,6 +475,49 @@
     }
 }
 
+impl TryFrom<Vec<(String, String)>> for NameTokenMetadata {
+    type Error = NameTokenError;
+
+    fn try_from(value: Vec<(String, String)>) -> Result<Self, Self::Error> {
+        let name = value
+            .iter()
+            .find(|(key, _)| key == "name")
+            .ok_or(NameTokenError::DeserializationError)?
+            .1
+            .clone();
+
+        let expiration = value
+            .iter()
+            .find(|(key, _)| key == "expiration")
+            .ok_or(NameTokenError::DeserializationError)?
+            .1
+            .parse()
+            .map_err(|_| NameTokenError::DeserializationError)?;
+
+        let resolver = value
+            .iter()
+            .find(|(key, _)| key == "resolver")
+            .cloned()
+            .map(|(_, value)| {
+                Address::from_str(&value).map_err(|_| NameTokenError::DeserializationError)
+            })
+            .transpose()?;
+
+        let asset_uri = value
+            .iter()
+            .find(|(key, _)| key == "asset_uri")
+            .map(|(_, value)| value.clone())
+            .unwrap_or_default();
+
+        Ok(NameTokenMetadata {
+            name,
+            expiration,
+            resolver,
+            asset_uri,
+        })
+    }
+}
+
 /// Information about a payment.
 #[odra::odra_type]
 pub struct PaymentInfo {
@@ -473,14 +600,16 @@
     pub label: String,
     pub owner: Address,
     pub token_expiration: u64,
+    pub asset_uri: String,
 }
 
 impl NameMintInfo {
-    pub fn new(label: &str, owner: Address, token_expiration: u64) -> Self {
+    pub fn new(label: &str, owner: Address, token_expiration: u64, asset_uri: &str) -> Self {
         Self {
             label: String::from(label),
             owner,
             token_expiration,
+            asset_uri: String::from(asset_uri),
         }
     }
 }
@@ -488,12 +617,12 @@
 /// Renewal information with new expiration time.
 #[odra::odra_type]
 pub struct TokenRenewalInfo {
-    pub token_id: String,
+    pub token_id: U256,
     pub token_expiration: u64,
 }
 
 impl TokenRenewalInfo {
-    pub fn new(token_id: String, token_expiration: u64) -> Self {
+    pub fn new(token_id: U256, token_expiration: u64) -> Self {
         Self {
             token_id,
             token_expiration,
@@ -601,13 +730,14 @@
         let expected = r#"{
             "name": "test-label",
             "expiration": 86400,
-            "resolver": null
+            "resolver": null,
+            "asset_uri": ""
         }"#
         .replace(" ", "")
         .replace("\n", "");
 
         // Test metadata to_json.
-        let metadata = NameTokenMetadata::with_no_resolver("test-label", 86400);
+        let metadata = NameTokenMetadata::with_no_resolver("test-label", 86400, "");
         assert_eq!(expected, metadata.json());
 
         // Test metadata from_json.
@@ -617,7 +747,8 @@
         let expected = r#"{
             "name": "test-label",
             "expiration": 86400,
-            "resolver": "hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a"
+            "resolver": "hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a",
+            "asset_uri": "https://example.com/asset-uri"
         }"#
         .replace(" ", "")
         .replace("\n", "");
@@ -626,6 +757,7 @@
         let metadata = NameTokenMetadata::with_resolver(
             "test-label",
             86400,
+            "https://example.com/asset-uri",
             Address::new("hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a")
                 .unwrap(),
         );
diff --git a/docs/src/casper_name_contracts/lib.rs.html b/docs/src/casper_name_contracts/lib.rs.html
index f6479a4..a0c691a 100644
--- a/docs/src/casper_name_contracts/lib.rs.html
+++ b/docs/src/casper_name_contracts/lib.rs.html
@@ -1,4 +1,5 @@
-lib.rs - source
1
+lib.rs - source

casper_name_contracts/
lib.rs

+1
 2
 3
 4
@@ -6,8 +7,7 @@
 6
 7
 8
-9
-
#![cfg_attr(not(test), no_std)]
+9
#![cfg_attr(not(test), no_std)]
 #![cfg_attr(not(test), no_main)]
 extern crate alloc;
 
diff --git a/docs/static.files/COPYRIGHT-23e9bde6c69aea69.txt b/docs/static.files/COPYRIGHT-eb44e4cf.txt
similarity index 100%
rename from docs/static.files/COPYRIGHT-23e9bde6c69aea69.txt
rename to docs/static.files/COPYRIGHT-eb44e4cf.txt
diff --git a/docs/static.files/FiraSans-LICENSE-db4b642586e02d97.txt b/docs/static.files/FiraSans-LICENSE-05ab6dbd.txt
similarity index 100%
rename from docs/static.files/FiraSans-LICENSE-db4b642586e02d97.txt
rename to docs/static.files/FiraSans-LICENSE-05ab6dbd.txt
diff --git a/docs/static.files/FiraSans-Medium-8f9a781e4970d388.woff2 b/docs/static.files/FiraSans-Medium-e1aa3f0a.woff2
similarity index 100%
rename from docs/static.files/FiraSans-Medium-8f9a781e4970d388.woff2
rename to docs/static.files/FiraSans-Medium-e1aa3f0a.woff2
diff --git a/docs/static.files/FiraSans-Regular-018c141bf0843ffd.woff2 b/docs/static.files/FiraSans-Regular-0fe48ade.woff2
similarity index 100%
rename from docs/static.files/FiraSans-Regular-018c141bf0843ffd.woff2
rename to docs/static.files/FiraSans-Regular-0fe48ade.woff2
diff --git a/docs/static.files/LICENSE-APACHE-b91fa81cba47b86a.txt b/docs/static.files/LICENSE-APACHE-a60eea81.txt
similarity index 100%
rename from docs/static.files/LICENSE-APACHE-b91fa81cba47b86a.txt
rename to docs/static.files/LICENSE-APACHE-a60eea81.txt
diff --git a/docs/static.files/LICENSE-MIT-65090b722b3f6c56.txt b/docs/static.files/LICENSE-MIT-23f18e03.txt
similarity index 100%
rename from docs/static.files/LICENSE-MIT-65090b722b3f6c56.txt
rename to docs/static.files/LICENSE-MIT-23f18e03.txt
diff --git a/docs/static.files/NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2 b/docs/static.files/NanumBarunGothic-13b3dcba.ttf.woff2
similarity index 100%
rename from docs/static.files/NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2
rename to docs/static.files/NanumBarunGothic-13b3dcba.ttf.woff2
diff --git a/docs/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt b/docs/static.files/NanumBarunGothic-LICENSE-a37d393b.txt
similarity index 100%
rename from docs/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt
rename to docs/static.files/NanumBarunGothic-LICENSE-a37d393b.txt
diff --git a/docs/static.files/SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2 b/docs/static.files/SourceCodePro-It-fc8b9304.ttf.woff2
similarity index 100%
rename from docs/static.files/SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2
rename to docs/static.files/SourceCodePro-It-fc8b9304.ttf.woff2
diff --git a/docs/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt b/docs/static.files/SourceCodePro-LICENSE-67f54ca7.txt
similarity index 100%
rename from docs/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt
rename to docs/static.files/SourceCodePro-LICENSE-67f54ca7.txt
diff --git a/docs/static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2 b/docs/static.files/SourceCodePro-Regular-8badfe75.ttf.woff2
similarity index 100%
rename from docs/static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2
rename to docs/static.files/SourceCodePro-Regular-8badfe75.ttf.woff2
diff --git a/docs/static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2 b/docs/static.files/SourceCodePro-Semibold-aa29a496.ttf.woff2
similarity index 100%
rename from docs/static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2
rename to docs/static.files/SourceCodePro-Semibold-aa29a496.ttf.woff2
diff --git a/docs/static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2 b/docs/static.files/SourceSerif4-Bold-6d4fd4c0.ttf.woff2
similarity index 100%
rename from docs/static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2
rename to docs/static.files/SourceSerif4-Bold-6d4fd4c0.ttf.woff2
diff --git a/docs/static.files/SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2 b/docs/static.files/SourceSerif4-It-ca3b17ed.ttf.woff2
similarity index 100%
rename from docs/static.files/SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2
rename to docs/static.files/SourceSerif4-It-ca3b17ed.ttf.woff2
diff --git a/docs/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7.md b/docs/static.files/SourceSerif4-LICENSE-a2cfd9d5.md
similarity index 100%
rename from docs/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7.md
rename to docs/static.files/SourceSerif4-LICENSE-a2cfd9d5.md
diff --git a/docs/static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2 b/docs/static.files/SourceSerif4-Regular-6b053e98.ttf.woff2
similarity index 100%
rename from docs/static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2
rename to docs/static.files/SourceSerif4-Regular-6b053e98.ttf.woff2
diff --git a/docs/static.files/clipboard-24048e6d87f63d07.svg b/docs/static.files/clipboard-24048e6d87f63d07.svg
deleted file mode 100644
index e437c83..0000000
--- a/docs/static.files/clipboard-24048e6d87f63d07.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/docs/static.files/favicon-2c020d218678b618.svg b/docs/static.files/favicon-044be391.svg
similarity index 100%
rename from docs/static.files/favicon-2c020d218678b618.svg
rename to docs/static.files/favicon-044be391.svg
diff --git a/docs/static.files/favicon-32x32-422f7d1d52889060.png b/docs/static.files/favicon-32x32-6580c154.png
similarity index 100%
rename from docs/static.files/favicon-32x32-422f7d1d52889060.png
rename to docs/static.files/favicon-32x32-6580c154.png
diff --git a/docs/static.files/main-20a3ad099b048cf2.js b/docs/static.files/main-20a3ad099b048cf2.js
deleted file mode 100644
index 133116e..0000000
--- a/docs/static.files/main-20a3ad099b048cf2.js
+++ /dev/null
@@ -1,11 +0,0 @@
-"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}function blurHandler(event,parentElem,hideCallback){if(!parentElem.contains(document.activeElement)&&!parentElem.contains(event.relatedTarget)){hideCallback()}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileTopbar=document.querySelector(".mobile-topbar");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileTopbar){const mobileTitle=document.createElement("h2");mobileTitle.className="location";if(hasClass(document.querySelector(".rustdoc"),"crate")){mobileTitle.innerHTML=`Crate ${window.currentCrate}`}else if(locationTitle){mobileTitle.innerHTML=locationTitle.innerHTML}mobileTopbar.appendChild(mobileTitle)}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url,errorCallback){const script=document.createElement("script");script.src=url;if(errorCallback!==undefined){script.onerror=errorCallback}document.head.append(script)}getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadScript(getVar("static-root-path")+getVar("settings-js"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=").map(x=>x.replace(/\+/g," "));params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function sendSearchForm(){document.getElementsByClassName("search-form")[0].submit()}function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"),sendSearchForm);loadScript(resourcePath("search-index",".js"),sendSearchForm)}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search)},descShards:new Map(),loadDesc:async function({descShard,descIndex}){if(descShard.promise===null){descShard.promise=new Promise((resolve,reject)=>{descShard.resolve=resolve;const ds=descShard;const fname=`${ds.crate}-desc-${ds.shard}-`;const url=resourcePath(`search.desc/${descShard.crate}/${fname}`,".js",);loadScript(url,reject)})}const list=await descShard.promise;return list[descIndex]},loadedDescShard:function(crate,shard,data){this.descShards.get(crate)[shard].resolve(data.split("\n"))},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}if(savedHash.startsWith("impl-")){const splitAt=savedHash.indexOf("/");if(splitAt!==-1){const implId=savedHash.slice(0,splitAt);const assocId=savedHash.slice(splitAt+1);const implElem=document.getElementById(implId);if(implElem&&implElem.parentElement.tagName==="SUMMARY"&&implElem.parentElement.parentElement.tagName==="DETAILS"){onEachLazy(implElem.parentElement.parentElement.querySelectorAll(`[id^="${assocId}"]`),item=>{const numbered=/([^-]+)-([0-9]+)/.exec(item.id);if(item.id===assocId||(numbered&&numbered[1]===assocId)){openParentDetails(item);item.scrollIntoView();setTimeout(()=>{window.location.replace("#"+item.id)},0)}},)}}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":case"/":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const modpath=hasClass(document.querySelector(".rustdoc"),"mod")?"../":"";const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=`${modpath}${name}/index.html`}else{path=`${modpath}${shortty}.${name}.html`}let current_page=document.location.href.toString();if(current_page.endsWith("/")){current_page+="index.html"}const link=document.createElement("a");link.href=path;if(path===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Aliases");block("union","unions","Unions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("opaque","opaque-types","Opaque Types");block("attr","attributes","Attribute Macros");block("derive","derives","Derive Macros");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","),);for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}window.register_type_impls=imp=>{if(!imp||!imp[window.currentCrate]){return}window.pending_type_impls=null;const idMap=new Map();let implementations=document.getElementById("implementations-list");let trait_implementations=document.getElementById("trait-implementations-list");let trait_implementations_header=document.getElementById("trait-implementations");const script=document.querySelector("script[data-self-path]");const selfPath=script?script.getAttribute("data-self-path"):null;const mainContent=document.querySelector("#main-content");const sidebarSection=document.querySelector(".sidebar section");let methods=document.querySelector(".sidebar .block.method");let associatedTypes=document.querySelector(".sidebar .block.associatedtype");let associatedConstants=document.querySelector(".sidebar .block.associatedconstant");let sidebarTraitList=document.querySelector(".sidebar .block.trait-implementation");for(const impList of imp[window.currentCrate]){const types=impList.slice(2);const text=impList[0];const isTrait=impList[1]!==0;const traitName=impList[1];if(types.indexOf(selfPath)===-1){continue}let outputList=isTrait?trait_implementations:implementations;if(outputList===null){const outputListName=isTrait?"Trait Implementations":"Implementations";const outputListId=isTrait?"trait-implementations-list":"implementations-list";const outputListHeaderId=isTrait?"trait-implementations":"implementations";const outputListHeader=document.createElement("h2");outputListHeader.id=outputListHeaderId;outputListHeader.innerText=outputListName;outputList=document.createElement("div");outputList.id=outputListId;if(isTrait){const link=document.createElement("a");link.href=`#${outputListHeaderId}`;link.innerText="Trait Implementations";const h=document.createElement("h3");h.appendChild(link);trait_implementations=outputList;trait_implementations_header=outputListHeader;sidebarSection.appendChild(h);sidebarTraitList=document.createElement("ul");sidebarTraitList.className="block trait-implementation";sidebarSection.appendChild(sidebarTraitList);mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}else{implementations=outputList;if(trait_implementations){mainContent.insertBefore(outputListHeader,trait_implementations_header);mainContent.insertBefore(outputList,trait_implementations_header)}else{const mainContent=document.querySelector("#main-content");mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}}}const template=document.createElement("template");template.innerHTML=text;onEachLazy(template.content.querySelectorAll("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});onEachLazy(template.content.querySelectorAll("[id]"),el=>{let i=0;if(idMap.has(el.id)){i=idMap.get(el.id)}else if(document.getElementById(el.id)){i=1;while(document.getElementById(`${el.id}-${2 * i}`)){i=2*i}while(document.getElementById(`${el.id}-${i}`)){i+=1}}if(i!==0){const oldHref=`#${el.id}`;const newHref=`#${el.id}-${i}`;el.id=`${el.id}-${i}`;onEachLazy(template.content.querySelectorAll("a[href]"),link=>{if(link.getAttribute("href")===oldHref){link.href=newHref}})}idMap.set(el.id,i+1)});const templateAssocItems=template.content.querySelectorAll("section.tymethod, "+"section.method, section.associatedtype, section.associatedconstant");if(isTrait){const li=document.createElement("li");const a=document.createElement("a");a.href=`#${template.content.querySelector(".impl").id}`;a.textContent=traitName;li.appendChild(a);sidebarTraitList.append(li)}else{onEachLazy(templateAssocItems,item=>{let block=hasClass(item,"associatedtype")?associatedTypes:(hasClass(item,"associatedconstant")?associatedConstants:(methods));if(!block){const blockTitle=hasClass(item,"associatedtype")?"Associated Types":(hasClass(item,"associatedconstant")?"Associated Constants":("Methods"));const blockClass=hasClass(item,"associatedtype")?"associatedtype":(hasClass(item,"associatedconstant")?"associatedconstant":("method"));const blockHeader=document.createElement("h3");const blockLink=document.createElement("a");blockLink.href="#implementations";blockLink.innerText=blockTitle;blockHeader.appendChild(blockLink);block=document.createElement("ul");block.className=`block ${blockClass}`;const insertionReference=methods||sidebarTraitList;if(insertionReference){const insertionReferenceH=insertionReference.previousElementSibling;sidebarSection.insertBefore(blockHeader,insertionReferenceH);sidebarSection.insertBefore(block,insertionReferenceH)}else{sidebarSection.appendChild(blockHeader);sidebarSection.appendChild(block)}if(hasClass(item,"associatedtype")){associatedTypes=block}else if(hasClass(item,"associatedconstant")){associatedConstants=block}else{methods=block}}const li=document.createElement("li");const a=document.createElement("a");a.innerText=item.id.split("-")[0].split(".")[1];a.href=`#${item.id}`;li.appendChild(a);block.appendChild(li)})}outputList.appendChild(template.content)}for(const list of[methods,associatedTypes,associatedConstants,sidebarTraitList]){if(!list){continue}const newChildren=Array.prototype.slice.call(list.children);newChildren.sort((a,b)=>{const aI=a.innerText;const bI=b.innerText;return aIbI?1:0});list.replaceChildren(...newChildren)}};if(window.pending_type_impls){window.register_type_impls(window.pending_type_impls)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";link.textContent=crate;const li=document.createElement("li");if(window.rootPath!=="./"&&crate===window.currentCrate){li.className="current"}li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px",)}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!e.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.contains(event.relatedTarget)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(event.relatedTarget)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=()=>{e.TOOLTIP_FORCE_VISIBLE=e.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!e.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(e);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointermove=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ -the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S / /","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
"+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ - restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ - enum, trait, type, macro, \ - and const.","Search functions by type signature (e.g., vec -> usize or \ - -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"","Look for functions that accept or return \ - slices and \ - arrays by writing \ - square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=switchFocus=>{hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=()=>{onEachLazy(document.querySelectorAll(".search-form .popover"),elem=>{elem.style.display="none"})};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){getHelpButton().querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}if(isHelpPage){showHelp();document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault()})}else{document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){const SIDEBAR_MIN=100;const SIDEBAR_MAX=500;const RUSTDOC_MOBILE_BREAKPOINT=700;const BODY_MIN=400;const SIDEBAR_VANISH_THRESHOLD=SIDEBAR_MIN/2;const sidebarButton=document.getElementById("sidebar-button");if(sidebarButton){sidebarButton.addEventListener("click",e=>{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false");if(document.querySelector(".rustdoc.src")){window.rustdocToggleSrcSidebar()}e.preventDefault()})}let currentPointerId=null;let desiredSidebarSize=null;let pendingSidebarResizingFrame=false;const resizer=document.querySelector(".sidebar-resizer");const sidebar=document.querySelector(".sidebar");if(!resizer||!sidebar){return}const isSrcPage=hasClass(document.body,"src");function hideSidebar(){if(isSrcPage){window.rustdocCloseSourceSidebar();updateLocalStorage("src-sidebar-width",null);document.documentElement.style.removeProperty("--src-sidebar-width");sidebar.style.removeProperty("--src-sidebar-width");resizer.style.removeProperty("--src-sidebar-width")}else{addClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","true");updateLocalStorage("desktop-sidebar-width",null);document.documentElement.style.removeProperty("--desktop-sidebar-width");sidebar.style.removeProperty("--desktop-sidebar-width");resizer.style.removeProperty("--desktop-sidebar-width")}}function showSidebar(){if(isSrcPage){window.rustdocShowSourceSidebar()}else{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false")}}function changeSidebarSize(size){if(isSrcPage){updateLocalStorage("src-sidebar-width",size);sidebar.style.setProperty("--src-sidebar-width",size+"px");resizer.style.setProperty("--src-sidebar-width",size+"px")}else{updateLocalStorage("desktop-sidebar-width",size);sidebar.style.setProperty("--desktop-sidebar-width",size+"px");resizer.style.setProperty("--desktop-sidebar-width",size+"px")}}function isSidebarHidden(){return isSrcPage?!hasClass(document.documentElement,"src-sidebar-expanded"):hasClass(document.documentElement,"hide-sidebar")}function resize(e){if(currentPointerId===null||currentPointerId!==e.pointerId){return}e.preventDefault();const pos=e.clientX-3;if(pos=SIDEBAR_MIN){if(isSidebarHidden()){showSidebar()}const constrainedPos=Math.min(pos,window.innerWidth-BODY_MIN,SIDEBAR_MAX);changeSidebarSize(constrainedPos);desiredSidebarSize=constrainedPos;if(pendingSidebarResizingFrame!==false){clearTimeout(pendingSidebarResizingFrame)}pendingSidebarResizingFrame=setTimeout(()=>{if(currentPointerId===null||pendingSidebarResizingFrame===false){return}pendingSidebarResizingFrame=false;document.documentElement.style.setProperty("--resizing-sidebar-width",desiredSidebarSize+"px",)},100)}}window.addEventListener("resize",()=>{if(window.innerWidth=(window.innerWidth-BODY_MIN)){changeSidebarSize(window.innerWidth-BODY_MIN)}else if(desiredSidebarSize!==null&&desiredSidebarSize>SIDEBAR_MIN){changeSidebarSize(desiredSidebarSize)}});function stopResize(e){if(currentPointerId===null){return}if(e){e.preventDefault()}desiredSidebarSize=sidebar.getBoundingClientRect().width;removeClass(resizer,"active");window.removeEventListener("pointermove",resize,false);window.removeEventListener("pointerup",stopResize,false);removeClass(document.documentElement,"sidebar-resizing");document.documentElement.style.removeProperty("--resizing-sidebar-width");if(resizer.releasePointerCapture){resizer.releasePointerCapture(currentPointerId);currentPointerId=null}}function initResize(e){if(currentPointerId!==null||e.altKey||e.ctrlKey||e.metaKey||e.button!==0){return}if(resizer.setPointerCapture){resizer.setPointerCapture(e.pointerId);if(!resizer.hasPointerCapture(e.pointerId)){resizer.releasePointerCapture(e.pointerId);return}currentPointerId=e.pointerId}window.hideAllModals(false);e.preventDefault();window.addEventListener("pointermove",resize,false);window.addEventListener("pointercancel",stopResize,false);window.addEventListener("pointerup",stopResize,false);addClass(resizer,"active");addClass(document.documentElement,"sidebar-resizing");const pos=e.clientX-sidebar.offsetLeft-3;document.documentElement.style.setProperty("--resizing-sidebar-width",pos+"px");desiredSidebarSize=null}resizer.addEventListener("pointerdown",initResize,false)}());(function(){let reset_button_timeout=null;const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.classList.add("clicked");if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){reset_button_timeout=null;but.classList.remove("clicked")}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/docs/static.files/main-5f194d8c.js b/docs/static.files/main-5f194d8c.js new file mode 100644 index 0000000..3d672cb --- /dev/null +++ b/docs/static.files/main-5f194d8c.js @@ -0,0 +1,11 @@ +"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden");const toggle=document.getElementById("toggle-all-docs");if(toggle){toggle.setAttribute("disabled","disabled")}}function showMain(){const main=document.getElementById(MAIN_ID);removeClass(main,"hidden");const mainHeading=main.querySelector(".main-heading");if(mainHeading&&searchState.rustdocToolbar){if(searchState.rustdocToolbar.parentElement){searchState.rustdocToolbar.parentElement.removeChild(searchState.rustdocToolbar)}mainHeading.appendChild(searchState.rustdocToolbar)}const toggle=document.getElementById("toggle-all-docs");if(toggle){toggle.removeAttribute("disabled")}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileTopbar=document.querySelector(".mobile-topbar");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileTopbar){const mobileTitle=document.createElement("h2");mobileTitle.className="location";if(hasClass(document.querySelector(".rustdoc"),"crate")){mobileTitle.innerHTML=`Crate ${window.currentCrate}`}else if(locationTitle){mobileTitle.innerHTML=locationTitle.innerHTML}mobileTopbar.appendChild(mobileTitle)}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden");const mainHeading=elemToDisplay.querySelector(".main-heading");if(mainHeading&&searchState.rustdocToolbar){if(searchState.rustdocToolbar.parentElement){searchState.rustdocToolbar.parentElement.removeChild(searchState.rustdocToolbar)}mainHeading.appendChild(searchState.rustdocToolbar)}}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url,errorCallback){const script=document.createElement("script");script.src=url;if(errorCallback!==undefined){script.onerror=errorCallback}document.head.append(script)}if(getSettingsButton()){getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadScript(getVar("static-root-path")+getVar("settings-js"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)}}window.searchState={rustdocToolbar:document.querySelector("rustdoc-toolbar"),loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=").map(x=>x.replace(/\+/g," "));params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function sendSearchForm(){document.getElementsByClassName("search-form")[0].submit()}function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"),sendSearchForm);loadScript(resourcePath("search-index",".js"),sendSearchForm)}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search)},descShards:new Map(),loadDesc:async function({descShard,descIndex}){if(descShard.promise===null){descShard.promise=new Promise((resolve,reject)=>{descShard.resolve=resolve;const ds=descShard;const fname=`${ds.crate}-desc-${ds.shard}-`;const url=resourcePath(`search.desc/${descShard.crate}/${fname}`,".js",);loadScript(url,reject)})}const list=await descShard.promise;return list[descIndex]},loadedDescShard:function(crate,shard,data){this.descShards.get(crate)[shard].resolve(data.split("\n"))},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}if(savedHash.startsWith("impl-")){const splitAt=savedHash.indexOf("/");if(splitAt!==-1){const implId=savedHash.slice(0,splitAt);const assocId=savedHash.slice(splitAt+1);const implElems=document.querySelectorAll(`details > summary > section[id^="${implId}"]`,);onEachLazy(implElems,implElem=>{const numbered=/^(.+?)-([0-9]+)$/.exec(implElem.id);if(implElem.id!==implId&&(!numbered||numbered[1]!==implId)){return false}return onEachLazy(implElem.parentElement.parentElement.querySelectorAll(`[id^="${assocId}"]`),item=>{const numbered=/^(.+?)-([0-9]+)$/.exec(item.id);if(item.id===assocId||(numbered&&numbered[1]===assocId)){openParentDetails(item);item.scrollIntoView();setTimeout(()=>{window.location.replace("#"+item.id)},0);return true}},)})}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":case"/":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementById("rustdoc-modnav");function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const modpath=hasClass(document.querySelector(".rustdoc"),"mod")?"../":"";const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=`${modpath}${name}/index.html`}else{path=`${modpath}${shortty}.${name}.html`}let current_page=document.location.href.toString();if(current_page.endsWith("/")){current_page+="index.html"}const link=document.createElement("a");link.href=path;link.textContent=name;const li=document.createElement("li");if(link.href===current_page){li.classList.add("current")}li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Aliases");block("union","unions","Unions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("attr","attributes","Attribute Macros");block("derive","derives","Derive Macros");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","),);for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}window.register_type_impls=imp=>{if(!imp||!imp[window.currentCrate]){return}window.pending_type_impls=null;const idMap=new Map();let implementations=document.getElementById("implementations-list");let trait_implementations=document.getElementById("trait-implementations-list");let trait_implementations_header=document.getElementById("trait-implementations");const script=document.querySelector("script[data-self-path]");const selfPath=script?script.getAttribute("data-self-path"):null;const mainContent=document.querySelector("#main-content");const sidebarSection=document.querySelector(".sidebar section");let methods=document.querySelector(".sidebar .block.method");let associatedTypes=document.querySelector(".sidebar .block.associatedtype");let associatedConstants=document.querySelector(".sidebar .block.associatedconstant");let sidebarTraitList=document.querySelector(".sidebar .block.trait-implementation");for(const impList of imp[window.currentCrate]){const types=impList.slice(2);const text=impList[0];const isTrait=impList[1]!==0;const traitName=impList[1];if(types.indexOf(selfPath)===-1){continue}let outputList=isTrait?trait_implementations:implementations;if(outputList===null){const outputListName=isTrait?"Trait Implementations":"Implementations";const outputListId=isTrait?"trait-implementations-list":"implementations-list";const outputListHeaderId=isTrait?"trait-implementations":"implementations";const outputListHeader=document.createElement("h2");outputListHeader.id=outputListHeaderId;outputListHeader.innerText=outputListName;outputList=document.createElement("div");outputList.id=outputListId;if(isTrait){const link=document.createElement("a");link.href=`#${outputListHeaderId}`;link.innerText="Trait Implementations";const h=document.createElement("h3");h.appendChild(link);trait_implementations=outputList;trait_implementations_header=outputListHeader;sidebarSection.appendChild(h);sidebarTraitList=document.createElement("ul");sidebarTraitList.className="block trait-implementation";sidebarSection.appendChild(sidebarTraitList);mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}else{implementations=outputList;if(trait_implementations){mainContent.insertBefore(outputListHeader,trait_implementations_header);mainContent.insertBefore(outputList,trait_implementations_header)}else{const mainContent=document.querySelector("#main-content");mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}}}const template=document.createElement("template");template.innerHTML=text;onEachLazy(template.content.querySelectorAll("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});onEachLazy(template.content.querySelectorAll("[id]"),el=>{let i=0;if(idMap.has(el.id)){i=idMap.get(el.id)}else if(document.getElementById(el.id)){i=1;while(document.getElementById(`${el.id}-${2 * i}`)){i=2*i}while(document.getElementById(`${el.id}-${i}`)){i+=1}}if(i!==0){const oldHref=`#${el.id}`;const newHref=`#${el.id}-${i}`;el.id=`${el.id}-${i}`;onEachLazy(template.content.querySelectorAll("a[href]"),link=>{if(link.getAttribute("href")===oldHref){link.href=newHref}})}idMap.set(el.id,i+1)});const templateAssocItems=template.content.querySelectorAll("section.tymethod, "+"section.method, section.associatedtype, section.associatedconstant");if(isTrait){const li=document.createElement("li");const a=document.createElement("a");a.href=`#${template.content.querySelector(".impl").id}`;a.textContent=traitName;li.appendChild(a);sidebarTraitList.append(li)}else{onEachLazy(templateAssocItems,item=>{let block=hasClass(item,"associatedtype")?associatedTypes:(hasClass(item,"associatedconstant")?associatedConstants:(methods));if(!block){const blockTitle=hasClass(item,"associatedtype")?"Associated Types":(hasClass(item,"associatedconstant")?"Associated Constants":("Methods"));const blockClass=hasClass(item,"associatedtype")?"associatedtype":(hasClass(item,"associatedconstant")?"associatedconstant":("method"));const blockHeader=document.createElement("h3");const blockLink=document.createElement("a");blockLink.href="#implementations";blockLink.innerText=blockTitle;blockHeader.appendChild(blockLink);block=document.createElement("ul");block.className=`block ${blockClass}`;const insertionReference=methods||sidebarTraitList;if(insertionReference){const insertionReferenceH=insertionReference.previousElementSibling;sidebarSection.insertBefore(blockHeader,insertionReferenceH);sidebarSection.insertBefore(block,insertionReferenceH)}else{sidebarSection.appendChild(blockHeader);sidebarSection.appendChild(block)}if(hasClass(item,"associatedtype")){associatedTypes=block}else if(hasClass(item,"associatedconstant")){associatedConstants=block}else{methods=block}}const li=document.createElement("li");const a=document.createElement("a");a.innerText=item.id.split("-")[0].split(".")[1];a.href=`#${item.id}`;li.appendChild(a);block.appendChild(li)})}outputList.appendChild(template.content)}for(const list of[methods,associatedTypes,associatedConstants,sidebarTraitList]){if(!list){continue}const newChildren=Array.prototype.slice.call(list.children);newChildren.sort((a,b)=>{const aI=a.innerText;const bI=b.innerText;return aIbI?1:0});list.replaceChildren(...newChildren)}};if(window.pending_type_impls){window.register_type_impls(window.pending_type_impls)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementById("rustdoc-modnav");if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";link.textContent=crate;const li=document.createElement("li");if(window.rootPath!=="./"&&crate===window.currentCrate){li.className="current"}li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.children[0].innerText="Summary"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.children[0].innerText="Show all"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{if(document.querySelector(".rustdoc.src")){return}onEachLazy(document.querySelectorAll(":not(.scraped-example) > .example-wrap > pre:not(.example-line-numbers)",),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.querySelectorAll(".example-wrap > .example-line-numbers"),x=>{x.parentNode.removeChild(x)})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";document.body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px",)}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!e.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.contains(event.relatedTarget)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(event.relatedTarget)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}document.body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=()=>{e.TOOLTIP_FORCE_VISIBLE=e.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!e.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(e);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointermove=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){if(!getHelpButton().contains(document.activeElement)&&!getHelpButton().contains(event.relatedTarget)&&!getSettingsButton().contains(document.activeElement)&&!getSettingsButton().contains(event.relatedTarget)){window.hidePopoverMenus()}}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ +the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S / /","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
"+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ + restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ + enum, trait, type, macro, \ + and const.","Search functions by type signature (e.g., vec -> usize or \ + -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ + your request: \"string\"","Look for functions that accept or return \ + slices and \ + arrays by writing \ + square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=switchFocus=>{hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=()=>{onEachLazy(document.querySelectorAll("rustdoc-toolbar .popover"),elem=>{elem.style.display="none"});const button=getHelpButton();if(button){removeClass(button,"help-open")}};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){const button=getHelpButton();addClass(button,"help-open");button.querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}const helpLink=document.querySelector(`#${HELP_BUTTON_ID} > a`);if(isHelpPage){buildHelpMenu()}else if(helpLink){helpLink.addEventListener("click",event=>{if(!helpLink.contains(helpLink)||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){const SIDEBAR_MIN=100;const SIDEBAR_MAX=500;const RUSTDOC_MOBILE_BREAKPOINT=700;const BODY_MIN=400;const SIDEBAR_VANISH_THRESHOLD=SIDEBAR_MIN/2;const sidebarButton=document.getElementById("sidebar-button");if(sidebarButton){sidebarButton.addEventListener("click",e=>{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false");if(document.querySelector(".rustdoc.src")){window.rustdocToggleSrcSidebar()}e.preventDefault()})}let currentPointerId=null;let desiredSidebarSize=null;let pendingSidebarResizingFrame=false;const resizer=document.querySelector(".sidebar-resizer");const sidebar=document.querySelector(".sidebar");if(!resizer||!sidebar){return}const isSrcPage=hasClass(document.body,"src");function hideSidebar(){if(isSrcPage){window.rustdocCloseSourceSidebar();updateLocalStorage("src-sidebar-width",null);document.documentElement.style.removeProperty("--src-sidebar-width");sidebar.style.removeProperty("--src-sidebar-width");resizer.style.removeProperty("--src-sidebar-width")}else{addClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","true");updateLocalStorage("desktop-sidebar-width",null);document.documentElement.style.removeProperty("--desktop-sidebar-width");sidebar.style.removeProperty("--desktop-sidebar-width");resizer.style.removeProperty("--desktop-sidebar-width")}}function showSidebar(){if(isSrcPage){window.rustdocShowSourceSidebar()}else{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false")}}function changeSidebarSize(size){if(isSrcPage){updateLocalStorage("src-sidebar-width",size);sidebar.style.setProperty("--src-sidebar-width",size+"px");resizer.style.setProperty("--src-sidebar-width",size+"px")}else{updateLocalStorage("desktop-sidebar-width",size);sidebar.style.setProperty("--desktop-sidebar-width",size+"px");resizer.style.setProperty("--desktop-sidebar-width",size+"px")}}function isSidebarHidden(){return isSrcPage?!hasClass(document.documentElement,"src-sidebar-expanded"):hasClass(document.documentElement,"hide-sidebar")}function resize(e){if(currentPointerId===null||currentPointerId!==e.pointerId){return}e.preventDefault();const pos=e.clientX-3;if(pos=SIDEBAR_MIN){if(isSidebarHidden()){showSidebar()}const constrainedPos=Math.min(pos,window.innerWidth-BODY_MIN,SIDEBAR_MAX);changeSidebarSize(constrainedPos);desiredSidebarSize=constrainedPos;if(pendingSidebarResizingFrame!==false){clearTimeout(pendingSidebarResizingFrame)}pendingSidebarResizingFrame=setTimeout(()=>{if(currentPointerId===null||pendingSidebarResizingFrame===false){return}pendingSidebarResizingFrame=false;document.documentElement.style.setProperty("--resizing-sidebar-width",desiredSidebarSize+"px",)},100)}}window.addEventListener("resize",()=>{if(window.innerWidth=(window.innerWidth-BODY_MIN)){changeSidebarSize(window.innerWidth-BODY_MIN)}else if(desiredSidebarSize!==null&&desiredSidebarSize>SIDEBAR_MIN){changeSidebarSize(desiredSidebarSize)}});function stopResize(e){if(currentPointerId===null){return}if(e){e.preventDefault()}desiredSidebarSize=sidebar.getBoundingClientRect().width;removeClass(resizer,"active");window.removeEventListener("pointermove",resize,false);window.removeEventListener("pointerup",stopResize,false);removeClass(document.documentElement,"sidebar-resizing");document.documentElement.style.removeProperty("--resizing-sidebar-width");if(resizer.releasePointerCapture){resizer.releasePointerCapture(currentPointerId);currentPointerId=null}}function initResize(e){if(currentPointerId!==null||e.altKey||e.ctrlKey||e.metaKey||e.button!==0){return}if(resizer.setPointerCapture){resizer.setPointerCapture(e.pointerId);if(!resizer.hasPointerCapture(e.pointerId)){resizer.releasePointerCapture(e.pointerId);return}currentPointerId=e.pointerId}window.hideAllModals(false);e.preventDefault();window.addEventListener("pointermove",resize,false);window.addEventListener("pointercancel",stopResize,false);window.addEventListener("pointerup",stopResize,false);addClass(resizer,"active");addClass(document.documentElement,"sidebar-resizing");const pos=e.clientX-sidebar.offsetLeft-3;document.documentElement.style.setProperty("--resizing-sidebar-width",pos+"px");desiredSidebarSize=null}resizer.addEventListener("pointerdown",initResize,false)}());(function(){function copyContentToClipboard(content){const el=document.createElement("textarea");el.value=content;el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el)}function copyButtonAnimation(button){button.classList.add("clicked");if(button.reset_button_timeout!==undefined){window.clearTimeout(button.reset_button_timeout)}button.reset_button_timeout=window.setTimeout(()=>{button.reset_button_timeout=undefined;button.classList.remove("clicked")},1000)}const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const title=document.querySelector("title").textContent.replace(" - Rust","");const[item,module]=title.split(" in ");const path=[item];if(module!==undefined){path.unshift(module)}copyContentToClipboard(path.join("::"));copyButtonAnimation(but)};function copyCode(codeElem){if(!codeElem){return}copyContentToClipboard(codeElem.textContent)}function getExampleWrap(event){let elem=event.target;while(!hasClass(elem,"example-wrap")){if(elem===document.body||elem.tagName==="A"||elem.tagName==="BUTTON"||hasClass(elem,"docblock")){return null}elem=elem.parentElement}return elem}function addCopyButton(event){const elem=getExampleWrap(event);if(elem===null){return}elem.removeEventListener("mouseover",addCopyButton);const parent=document.createElement("div");parent.className="button-holder";const runButton=elem.querySelector(".test-arrow");if(runButton!==null){parent.appendChild(runButton)}elem.appendChild(parent);const copyButton=document.createElement("button");copyButton.className="copy-button";copyButton.title="Copy code to clipboard";copyButton.addEventListener("click",()=>{copyCode(elem.querySelector("pre > code"));copyButtonAnimation(copyButton)});parent.appendChild(copyButton);if(!elem.parentElement.classList.contains("scraped-example")){return}const scrapedWrapped=elem.parentElement;window.updateScrapedExample(scrapedWrapped,parent)}function showHideCodeExampleButtons(event){const elem=getExampleWrap(event);if(elem===null){return}let buttons=elem.querySelector(".button-holder");if(buttons===null){addCopyButton(event);buttons=elem.querySelector(".button-holder");if(buttons===null){return}}buttons.classList.toggle("keep-visible")}onEachLazy(document.querySelectorAll(".docblock .example-wrap"),elem=>{elem.addEventListener("mouseover",addCopyButton);elem.addEventListener("click",showHideCodeExampleButtons)})}()) \ No newline at end of file diff --git a/docs/static.files/normalize-76eba96aa4d2e634.css b/docs/static.files/normalize-9960930a.css similarity index 100% rename from docs/static.files/normalize-76eba96aa4d2e634.css rename to docs/static.files/normalize-9960930a.css diff --git a/docs/static.files/noscript-09095024cf37855e.css b/docs/static.files/noscript-09095024cf37855e.css deleted file mode 100644 index 5978694..0000000 --- a/docs/static.files/noscript-09095024cf37855e.css +++ /dev/null @@ -1 +0,0 @@ - #main-content .attributes{margin-left:0 !important;}#copy-path,#sidebar-button,.sidebar-resizer{display:none !important;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;}:root,:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}@media (prefers-color-scheme:dark){:root,:root:not([data-theme]){--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}} \ No newline at end of file diff --git a/docs/static.files/noscript-893ab5e7.css b/docs/static.files/noscript-893ab5e7.css new file mode 100644 index 0000000..a6c18ec --- /dev/null +++ b/docs/static.files/noscript-893ab5e7.css @@ -0,0 +1 @@ + #main-content .attributes{margin-left:0 !important;}#copy-path,#sidebar-button,.sidebar-resizer{display:none !important;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;}:root,:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#595959;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}@media (prefers-color-scheme:dark){:root,:root:not([data-theme]){--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#a5a5a5;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(65%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}} \ No newline at end of file diff --git a/docs/static.files/rust-logo-151179464ae7ed46.svg b/docs/static.files/rust-logo-9a9549ea.svg similarity index 100% rename from docs/static.files/rust-logo-151179464ae7ed46.svg rename to docs/static.files/rust-logo-9a9549ea.svg diff --git a/docs/static.files/rustdoc-081576b923113409.css b/docs/static.files/rustdoc-081576b923113409.css deleted file mode 100644 index 33b69ca..0000000 --- a/docs/static.files/rustdoc-081576b923113409.css +++ /dev/null @@ -1,27 +0,0 @@ - :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;--desktop-sidebar-width:200px;--src-sidebar-width:300px;--desktop-sidebar-z-index:100;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-018c141bf0843ffd.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-8f9a781e4970d388.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-46f98efaafac5295.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.src,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.logo-container{line-height:0;display:block;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 var(--desktop-sidebar-width);width:var(--desktop-sidebar-width);overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;z-index:var(--desktop-sidebar-z-index);}.rustdoc.src .sidebar{flex-basis:50px;width:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.hide-sidebar .sidebar,.hide-sidebar .sidebar-resizer{display:none;}.sidebar-resizer{touch-action:none;width:9px;cursor:col-resize;z-index:calc(var(--desktop-sidebar-z-index) + 1);position:fixed;height:100%;left:calc(var(--desktop-sidebar-width) + 1px);}.rustdoc.src .sidebar-resizer{left:49px;}.src-sidebar-expanded .src .sidebar-resizer{left:var(--src-sidebar-width);}.sidebar-resizing{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.sidebar-resizing*{cursor:col-resize !important;}.sidebar-resizing .sidebar{position:fixed;}.sidebar-resizing>body{padding-left:var(--resizing-sidebar-width);}.sidebar-resizer:hover,.sidebar-resizer:active,.sidebar-resizer:focus,.sidebar-resizer.active{width:10px;margin:0;left:var(--desktop-sidebar-width);border-left:solid 1px var(--sidebar-resizer-hover);}.src-sidebar-expanded .rustdoc.src .sidebar-resizer:hover,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:active,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:focus,.src-sidebar-expanded .rustdoc.src .sidebar-resizer.active{left:calc(var(--src-sidebar-width) - 1px);}@media (pointer:coarse){.sidebar-resizer{display:none !important;}}.sidebar-resizer.active{padding:0 140px;width:2px;margin-left:-140px;border-left:none;}.sidebar-resizer.active:before{border-left:solid 2px var(--sidebar-resizer-active);display:block;height:100%;content:"";}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}.src .sidebar>*{visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:var(--src-sidebar-width);width:var(--src-sidebar-width);}.src-sidebar-expanded .src .sidebar>*{visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.logo-container>img{height:48px;width:48px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;margin-right:0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>.version,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar .current a,.sidebar-crate a.logo-container:hover+h2 a,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.sidebar-crate{display:flex;align-items:center;justify-content:center;margin:14px 32px 1rem;row-gap:10px;column-gap:32px;flex-wrap:wrap;}.sidebar-crate h2{flex-grow:1;margin:0 -8px;align-self:start;}.sidebar-crate .logo-container{margin:0 -16px 0 -16px;text-align:center;}.sidebar-crate h2 a{display:block;margin:0 calc(-24px + 0.25rem) 0 -0.2rem;padding:calc((16px - 0.57rem ) / 2 ) 0.25rem;padding-left:0.2rem;}.sidebar-crate h2 .version{display:block;font-weight:normal;font-size:1rem;overflow-wrap:break-word;}.sidebar-crate+.version{margin-top:-1rem;margin-bottom:1rem;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.src) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}div.where{white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.src nav.sub{margin:0 0 15px 0;}.section-header{display:block;position:relative;}.section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.section-header>.anchor{left:-15px;padding-right:8px;}h2.section-header>.anchor{padding-right:6px;}a.doc-anchor{color:var(--main-color);display:none;position:absolute;left:-17px;padding-right:5px;padding-left:3px;}*:hover>.doc-anchor{display:block;}.top-doc>.docblock>*:first-child>.doc-anchor{display:none !important;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover:not(.doc-anchor),.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block li.current a{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ - ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:2;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;flex:3;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.popover{position:absolute;top:100%;right:0;z-index:calc(var(--desktop-sidebar-z-index) + 1);margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ - \ - ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#help.popover{max-width:600px;--popover-arrow-offset:48px;}#help dt{float:left;clear:left;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side>div{width:50%;float:left;padding:0 20px 20px 17px;}.item-info .stab{display:block;padding:3px;margin-bottom:5px;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;vertical-align:baseline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji,.item-info .stab::before{font-size:1.25rem;}.stab .emoji{margin-right:0.3rem;}.item-info .stab::before{content:"\0";width:0;display:inline-block;color:transparent;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}.top-doc>.docblock>.warning:first-child::before{top:20px;}a.test-arrow{visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;color:var(--test-arrow-color);background-color:var(--test-arrow-background-color);}a.test-arrow:hover{color:var(--test-arrow-hover-color);background-color:var(--test-arrow-hover-background-color);}.example-wrap:hover .test-arrow{visibility:visible;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}.src-sidebar-title{position:sticky;top:0;display:flex;padding:8px 8px 0 48px;margin-bottom:7px;background:var(--sidebar-background-color);border-bottom:1px solid var(--border-color);}#settings-menu,#help-button{margin-left:4px;display:flex;}#sidebar-button{display:none;line-height:0;}.hide-sidebar #sidebar-button,.src #sidebar-button{display:flex;margin-right:4px;position:fixed;left:6px;height:34px;width:34px;background-color:var(--main-background-color);z-index:1;}.src #sidebar-button{left:8px;z-index:calc(var(--desktop-sidebar-z-index) + 1);}.hide-sidebar .src #sidebar-button{position:static;}#settings-menu>a,#help-button>a,#sidebar-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:2px;color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus,#sidebar-button>a:hover,#sidebar-button>a:focus{border-color:var(--settings-button-border-focus);}#settings-menu>a{line-height:0;font-size:0;}#settings-menu>a:before{content:url('wheel-63255fc4502dca9a.svg');width:22px;height:22px;}#sidebar-button>a:before{content:url('data:image/svg+xml,\ - \ - \ - ');width:22px;height:22px;}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:34px;width:33px;margin-left:10px;padding:0;padding-left:2px;border:0;font-size:0;}#copy-path::before{filter:var(--copy-path-img-filter);content:url('clipboard-24048e6d87f63d07.svg');}#copy-path:hover::before{filter:var(--copy-path-img-hover-filter);}#copy-path.clicked::before{content:url('data:image/svg+xml,\ - \ - ');}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,') no-repeat top left;content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,') no-repeat top left;}details.toggle[open] >summary::after{content:"Collapse";}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}.src #sidebar-button>a:before,.sidebar-menu-toggle:before{content:url('data:image/svg+xml,\ - ');opacity:0.75;}.sidebar-menu-toggle:hover:before,.sidebar-menu-toggle:active:before,.sidebar-menu-toggle:focus:before{opacity:1;}.src #sidebar-button>a:before{content:url('data:image/svg+xml,\ - \ - \ - ');opacity:0.75;}@media (max-width:850px){#search-tabs .count{display:block;}}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.main-heading{flex-direction:column;}.out-of-band{text-align:left;margin-left:initial;padding:initial;}.out-of-band .since::before{content:"Since ";}.sidebar .logo-container,.sidebar .location,.sidebar-resizer{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.src .search-form{margin-left:40px;}.hide-sidebar .search-form{margin-left:32px;}.hide-sidebar .src .search-form{margin-left:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;white-space:nowrap;text-overflow:ellipsis;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.hide-sidebar .mobile-topbar{display:none;}.sidebar-menu-toggle{width:45px;border:none;line-height:0;}.hide-sidebar .sidebar-menu-toggle{display:none;}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#copy-path,#help-button{display:none;}#sidebar-button>a:before{content:url('data:image/svg+xml,\ - \ - \ - ');width:22px;height:22px;}.sidebar-menu-toggle:before{filter:var(--mobile-sidebar-menu-filter);}.sidebar-menu-toggle:hover{background:var(--main-background-color);}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{position:fixed;max-width:100vw;width:100vw;}.src .src-sidebar-title{padding-top:0;}details.toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>details.toggle:not(.top-doc)>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}.impl-items>.item-info{margin-left:34px;}.src nav.sub{margin:0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}}@media print{nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}.docblock{margin-left:0;}main{padding:10px;}}@media (max-width:464px){.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example{position:relative;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:calc(1.5em * 5 + 10px);}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;padding-bottom:0;max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper,.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper pre{max-height:calc(1.5em * 10 + 10px);}.scraped-example .code-wrapper .next,.scraped-example .code-wrapper .prev,.scraped-example .code-wrapper .expand{color:var(--main-color);position:absolute;top:0.25em;z-index:1;padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.scraped-example .code-wrapper .prev{right:2.25em;}.scraped-example .code-wrapper .next{right:1.25em;}.scraped-example .code-wrapper .expand{right:0.25em;}.scraped-example:not(.expanded) .code-wrapper::before,.scraped-example:not(.expanded) .code-wrapper::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .code-wrapper::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .code-wrapper::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example .code-wrapper .example-wrap{width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .example-wrap .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .example-wrap .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;}:root[data-theme="light"],:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="dark"]{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="ayu"]{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);--sidebar-resizer-hover:hsl(34,50%,33%);--sidebar-resizer-active:hsl(34,100%,66%);}:root[data-theme="ayu"] h1,:root[data-theme="ayu"] h2,:root[data-theme="ayu"] h3,:root[data-theme="ayu"] h4,:where(:root[data-theme="ayu"]) h1 a,:root[data-theme="ayu"] .sidebar h2 a,:root[data-theme="ayu"] .sidebar h3 a{color:#fff;}:root[data-theme="ayu"] .docblock code{color:#ffb454;}:root[data-theme="ayu"] .docblock a>code{color:#39AFD7 !important;}:root[data-theme="ayu"] .code-header,:root[data-theme="ayu"] .docblock pre>code,:root[data-theme="ayu"] pre,:root[data-theme="ayu"] pre>code,:root[data-theme="ayu"] .item-info code,:root[data-theme="ayu"] .rustdoc.source .example-wrap{color:#e6e1cf;}:root[data-theme="ayu"] .sidebar .current,:root[data-theme="ayu"] .sidebar .current a,:root[data-theme="ayu"] .sidebar a:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:hover,:root[data-theme="ayu"] details.dir-entry summary:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:focus,:root[data-theme="ayu"] details.dir-entry summary:focus,:root[data-theme="ayu"] #src-sidebar div.files>a.selected{color:#ffb44c;}:root[data-theme="ayu"] .sidebar-elems .location{color:#ff7733;}:root[data-theme="ayu"] .src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}:root[data-theme="ayu"] .search-results a:hover,:root[data-theme="ayu"] .search-results a:focus{color:#fff !important;background-color:#3c3c3c;}:root[data-theme="ayu"] .search-results a{color:#0096cf;}:root[data-theme="ayu"] .search-results a div.desc{color:#c5c5c5;}:root[data-theme="ayu"] .result-name .primitive>i,:root[data-theme="ayu"] .result-name .keyword>i{color:#788797;}:root[data-theme="ayu"] #search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}:root[data-theme="ayu"] #search-tabs>button:not(.selected){border:none;background-color:transparent !important;}:root[data-theme="ayu"] #search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}:root[data-theme="ayu"] #settings-menu>a img,:root[data-theme="ayu"] #sidebar-button>a:before{filter:invert(100);} \ No newline at end of file diff --git a/docs/static.files/rustdoc-46132b98.css b/docs/static.files/rustdoc-46132b98.css new file mode 100644 index 0000000..2efac0b --- /dev/null +++ b/docs/static.files/rustdoc-46132b98.css @@ -0,0 +1,53 @@ + :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;--desktop-sidebar-width:200px;--src-sidebar-width:300px;--desktop-sidebar-z-index:100;--sidebar-elems-left-padding:24px;--clipboard-image:url('data:image/svg+xml,\ +\ +\ +');--copy-path-height:34px;--copy-path-width:33px;--checkmark-image:url('data:image/svg+xml,\ +\ +');--button-left-margin:4px;--button-border-radius:2px;--toolbar-button-border-radius:6px;--code-block-border-radius:6px;--impl-items-indent:0.3em;--docblock-indent:24px;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-0fe48ade.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-e1aa3f0a.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-6b053e98.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-ca3b17ed.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-6d4fd4c0.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-8badfe75.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-fc8b9304.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-aa29a496.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-13b3dcba.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;grid-area:main-heading-h1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{position:relative;display:grid;grid-template-areas:"main-heading-breadcrumbs main-heading-breadcrumbs" "main-heading-h1 main-heading-toolbar" "main-heading-sub-heading main-heading-toolbar";grid-template-columns:minmax(105px,1fr) minmax(0,max-content);grid-template-rows:minmax(25px,min-content) min-content min-content;padding-bottom:6px;margin-bottom:15px;}.rustdoc-breadcrumbs{grid-area:main-heading-breadcrumbs;line-height:1.25;display:flex;flex-wrap:wrap;align-items:end;padding-top:5px;}.rustdoc-breadcrumbs a{padding:4px 0;margin:-4px 0;z-index:1;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}.structfield,.sub-variant-field{margin:0.6em 0;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,.sub-heading,span.since,a.src,rustdoc-toolbar,summary.hideme,.scraped-example-list,.rustdoc-breadcrumbs,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.search-results li,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,.code-header,.type-signature{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap .src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.logo-container{line-height:0;display:block;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 var(--desktop-sidebar-width);width:var(--desktop-sidebar-width);overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;z-index:var(--desktop-sidebar-z-index);}.rustdoc.src .sidebar{flex-basis:50px;width:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.hide-sidebar .sidebar,.hide-sidebar .sidebar-resizer{display:none;}.sidebar-resizer{touch-action:none;width:9px;cursor:col-resize;z-index:calc(var(--desktop-sidebar-z-index) + 1);position:fixed;height:100%;left:calc(var(--desktop-sidebar-width) + 1px);}.rustdoc.src .sidebar-resizer{left:49px;}.src-sidebar-expanded .src .sidebar-resizer{left:var(--src-sidebar-width);}.sidebar-resizing{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.sidebar-resizing*{cursor:col-resize !important;}.sidebar-resizing .sidebar{position:fixed;}.sidebar-resizing>body{padding-left:var(--resizing-sidebar-width);}.sidebar-resizer:hover,.sidebar-resizer:active,.sidebar-resizer:focus,.sidebar-resizer.active{width:10px;margin:0;left:var(--desktop-sidebar-width);border-left:solid 1px var(--sidebar-resizer-hover);}.src-sidebar-expanded .rustdoc.src .sidebar-resizer:hover,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:active,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:focus,.src-sidebar-expanded .rustdoc.src .sidebar-resizer.active{left:calc(var(--src-sidebar-width) - 1px);}@media (pointer:coarse){.sidebar-resizer{display:none !important;}}.sidebar-resizer.active{padding:0 140px;width:2px;margin-left:-140px;border-left:none;}.sidebar-resizer.active:before{border-left:solid 2px var(--sidebar-resizer-active);display:block;height:100%;content:"";}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}.src .sidebar>*{visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:var(--src-sidebar-width);width:var(--src-sidebar-width);}.src-sidebar-expanded .src .sidebar>*{visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.logo-container>img{height:48px;width:48px;}ul.block,.block li,.block ul{padding:0;margin:0;list-style:none;}.block ul a{padding-left:1rem;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-right:0.25rem;border-left:solid var(--sidebar-elems-left-padding) transparent;margin-left:calc(-0.25rem - var(--sidebar-elems-left-padding));background-clip:border-box;}.hide-toc #rustdoc-toc,.hide-toc .in-crate{display:none;}.hide-modnav #rustdoc-modnav{display:none;}.sidebar h2{text-wrap:balance;overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{text-wrap:balance;overflow-wrap:anywhere;font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>.version,.sidebar>h2{padding-left:var(--sidebar-elems-left-padding);}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar .current a,.sidebar-crate a.logo-container:hover+h2 a,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.sidebar-crate{display:flex;align-items:center;justify-content:center;margin:14px 32px 1rem;row-gap:10px;column-gap:32px;flex-wrap:wrap;}.sidebar-crate h2{flex-grow:1;margin:0 -8px;align-self:start;}.sidebar-crate .logo-container{margin:0 calc(-16px - var(--sidebar-elems-left-padding));padding:0 var(--sidebar-elems-left-padding);text-align:center;}.sidebar-crate .logo-container img{margin-top:-16px;border-top:solid 16px transparent;box-sizing:content-box;position:relative;background-clip:border-box;z-index:1;}.sidebar-crate h2 a{display:block;border-left:solid var(--sidebar-elems-left-padding) transparent;background-clip:border-box;margin:0 calc(-24px + 0.25rem) 0 calc(-0.2rem - var(--sidebar-elems-left-padding));padding:calc((16px - 0.57rem ) / 2 ) 0.25rem;padding-left:0.2rem;}.sidebar-crate h2 .version{display:block;font-weight:normal;font-size:1rem;overflow-wrap:break-word;}.sidebar-crate+.version{margin-top:-1rem;margin-bottom:1rem;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap>pre,.rustdoc .scraped-example .src-line-numbers,.rustdoc .scraped-example .src-line-numbers>pre{border-radius:6px;}.rustdoc .example-wrap>.example-line-numbers,.rustdoc .scraped-example .src-line-numbers,.rustdoc .scraped-example .src-line-numbers>pre{border-top-right-radius:0;border-bottom-right-radius:0;}.rustdoc .example-wrap>.example-line-numbers+pre,.rustdoc .scraped-example .rust{border-top-left-radius:0;border-bottom-left-radius:0;}.rustdoc .scraped-example{position:relative;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.scraped-example:not(.expanded) .example-wrap{max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .example-wrap{max-height:calc(1.5em * 10 + 10px);}.rustdoc:not(.src) .scraped-example:not(.expanded) .src-line-numbers,.rustdoc:not(.src) .scraped-example:not(.expanded) .src-line-numbers>pre,.rustdoc:not(.src) .scraped-example:not(.expanded) pre.rust{padding-bottom:0;overflow:auto hidden;}.rustdoc:not(.src) .scraped-example .src-line-numbers{padding-top:0;}.rustdoc:not(.src) .scraped-example.expanded .src-line-numbers{padding-bottom:0;}.rustdoc:not(.src) .example-wrap pre{overflow:auto;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap .src-line-numbers{min-width:fit-content;flex-grow:0;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;padding-right:2px;color:var(--src-line-numbers-span-color);}.rustdoc .scraped-example .example-wrap .src-line-numbers{padding:0;}.rustdoc .src-line-numbers pre{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:var(--docblock-indent);position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.sub-heading{font-size:1rem;flex-grow:0;grid-area:main-heading-sub-heading;line-height:1.25;padding-bottom:4px;}.main-heading rustdoc-toolbar,.main-heading .out-of-band{grid-area:main-heading-toolbar;}rustdoc-toolbar{display:flex;flex-direction:row;flex-wrap:nowrap;min-height:60px;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap,.example-wrap .src-line-numbers{background-color:var(--code-block-background-color);border-radius:var(--code-block-border-radius);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.docblock .stab,.docblock-short .stab,.docblock p code{display:inline-block;}.docblock li{margin-bottom:.4em;}.docblock li p:not(:last-child){margin-bottom:.3em;}div.where{white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:var(--docblock-indent);}.impl-items>.item-info{margin-left:calc(var(--docblock-indent) + var(--impl-items-indent));}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 0 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;margin-bottom:4px;}.src nav.sub{margin:0 0 -10px 0;}.section-header{display:block;position:relative;}.section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.section-header>.anchor{left:-15px;padding-right:8px;}h2.section-header>.anchor{padding-right:6px;}a.doc-anchor{color:var(--main-color);display:none;position:absolute;left:-17px;padding-right:10px;padding-left:3px;}*:hover>.doc-anchor{display:block;}.top-doc>.docblock>*:first-child>.doc-anchor{display:none !important;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.scrape-help):not(.tooltip):hover:not(.doc-anchor),.docblock-short a:not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block li.current a{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;width:100%;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}.search-results-title+.sub-heading{color:var(--main-color);display:flex;align-items:baseline;white-space:nowrap;}#crate-search-div{position:relative;min-width:0;}#crate-search{padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ + ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;margin:0;padding:0;}.search-results>a{display:grid;grid-template-areas:"search-result-name search-result-desc" "search-result-type-signature search-result-type-signature";grid-template-columns:.6fr .4fr;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);column-gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;grid-area:search-result-desc;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;grid-area:search-result-name;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.search-results .type-signature{grid-area:search-result-type-signature;white-space:pre-wrap;}.popover{position:absolute;top:100%;right:0;z-index:calc(var(--desktop-sidebar-z-index) + 1);margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ + \ + ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#settings.popover{--popover-arrow-offset:202px;top:calc(100% - 16px);}#help.popover{max-width:600px;--popover-arrow-offset:118px;top:calc(100% - 16px);}#help dt{float:left;clear:left;margin-right:0.5rem;}#help dd{margin-bottom:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;padding:0 0.5rem;text-wrap-style:balance;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side{display:flex;margin-bottom:20px;}.side-by-side>div{width:50%;padding:0 20px 0 17px;}.item-info .stab{display:block;padding:3px;margin-bottom:5px;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;vertical-align:baseline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji,.item-info .stab::before{font-size:1.25rem;}.stab .emoji{margin-right:0.3rem;}.item-info .stab::before{content:"\0";width:0;display:inline-block;color:transparent;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band,.sub-heading,rustdoc-toolbar{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}.top-doc>.docblock>.warning:first-child::before{top:20px;}.example-wrap>a.test-arrow,.example-wrap .button-holder{visibility:hidden;position:absolute;top:4px;right:4px;z-index:1;}a.test-arrow{height:var(--copy-path-height);padding:6px 4px 0 11px;}a.test-arrow::before{content:url('data:image/svg+xml,');}.example-wrap .button-holder{display:flex;}@media not (pointer:coarse){.example-wrap:hover>a.test-arrow,.example-wrap:hover>.button-holder{visibility:visible;}}.example-wrap .button-holder.keep-visible{visibility:visible;}.example-wrap .button-holder>*{background:var(--main-background-color);cursor:pointer;border-radius:var(--button-border-radius);height:var(--copy-path-height);width:var(--copy-path-width);border:0;color:var(--code-example-button-color);}.example-wrap .button-holder>*:hover{color:var(--code-example-button-hover-color);}.example-wrap .button-holder>*:not(:first-child){margin-left:var(--button-left-margin);}.example-wrap .button-holder .copy-button{padding:2px 0 0 4px;}.example-wrap .button-holder .copy-button::before,.example-wrap .test-arrow::before{filter:var(--copy-path-img-filter);}.example-wrap .button-holder .copy-button::before{content:var(--clipboard-image);}.example-wrap .button-holder .copy-button:hover::before,.example-wrap .test-arrow:hover::before{filter:var(--copy-path-img-hover-filter);}.example-wrap .button-holder .copy-button.clicked::before{content:var(--checkmark-image);padding-right:5px;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.main-heading span.since::before{content:"Since ";}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}@keyframes targetfadein{from{background-color:var(--main-background-color);}10%{background-color:var(--target-border-color);}to{background-color:var(--target-background-color);}}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}@media not (prefers-reduced-motion){:target{animation:0.65s cubic-bezier(0,0,0.1,1.0) 0.1s targetfadein;}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{margin-top:0.25rem;display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}.src-sidebar-title{position:sticky;top:0;display:flex;padding:8px 8px 0 48px;margin-bottom:7px;background:var(--sidebar-background-color);border-bottom:1px solid var(--border-color);}#settings-menu,#help-button,button#toggle-all-docs{margin-left:var(--button-left-margin);display:flex;line-height:1.25;min-width:14px;}#sidebar-button{display:none;line-height:0;}.hide-sidebar #sidebar-button,.src #sidebar-button{display:flex;margin-right:4px;position:fixed;left:6px;height:34px;width:34px;background-color:var(--main-background-color);z-index:1;}.src #sidebar-button{left:8px;z-index:calc(var(--desktop-sidebar-z-index) + 1);}.hide-sidebar .src #sidebar-button{position:static;}#settings-menu>a,#help-button>a,#sidebar-button>a,button#toggle-all-docs{display:flex;align-items:center;justify-content:center;flex-direction:column;border:1px solid transparent;border-radius:var(--button-border-radius);color:var(--main-color);}#settings-menu>a,#help-button>a,button#toggle-all-docs{width:80px;border-radius:var(--toolbar-button-border-radius);}#settings-menu>a,#help-button>a{min-width:0;}#sidebar-button>a{background-color:var(--button-background-color);border-color:var(--border-color);width:33px;}#settings-menu>a:hover,#settings-menu>a:focus-visible,#help-button>a:hover,#help-button>a:focus-visible,#sidebar-button>a:hover,#sidebar-button>a:focus-visible,button#toggle-all-docs:hover,button#toggle-all-docs:focus-visible{border-color:var(--settings-button-border-focus);text-decoration:none;}#settings-menu>a:before{content:url('data:image/svg+xml,\ + ');width:18px;height:18px;filter:var(--settings-menu-filter);}button#toggle-all-docs:before{content:url('data:image/svg+xml,\ + ');width:18px;height:18px;filter:var(--settings-menu-filter);}#help-button>a:before{content:url('data:image/svg+xml,\ + \ + ?');width:18px;height:18px;filter:var(--settings-menu-filter);}button#toggle-all-docs:before,#help-button>a:before,#settings-menu>a:before{filter:var(--settings-menu-filter);margin:8px;}@media not (pointer:coarse){button#toggle-all-docs:hover:before,#help-button>a:hover:before,#settings-menu>a:hover:before{filter:var(--settings-menu-hover-filter);}}button[disabled]#toggle-all-docs{opacity:0.25;border:solid 1px var(--main-background-color);background-size:cover;}button[disabled]#toggle-all-docs:hover{border:solid 1px var(--main-background-color);cursor:not-allowed;}rustdoc-toolbar span.label{font-size:1rem;flex-grow:1;padding-bottom:4px;}#sidebar-button>a:before{content:url('data:image/svg+xml,\ + \ + \ + ');width:22px;height:22px;}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:var(--copy-path-height);width:var(--copy-path-width);margin-left:10px;padding:0;padding-left:2px;border:0;font-size:0;}#copy-path::before{filter:var(--copy-path-img-filter);content:var(--clipboard-image);}#copy-path:hover::before{filter:var(--copy-path-img-hover-filter);}#copy-path.clicked::before{content:var(--checkmark-image);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.big-toggle{contain:inline-size;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,\ + ');content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}.impl-items>*:not(.item-info),.implementors-toggle>.docblock{margin-left:var(--impl-items-indent);}details.big-toggle>summary:not(.hideme)::before{left:-34px;top:9px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,\ + ');}details.toggle[open] >summary::after{content:"Collapse";}details.toggle:not([open])>summary .docblock{max-height:calc(1.5em + 0.75em);overflow-y:hidden;}details.toggle:not([open])>summary .docblock>:first-child{max-width:100%;overflow:hidden;width:fit-content;white-space:nowrap;position:relative;padding-right:1em;}details.toggle:not([open])>summary .docblock>:first-child::after{content:"…";position:absolute;right:0;top:0;bottom:0;z-index:1;background-color:var(--main-background-color);font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;padding-left:0.2em;}details.toggle:not([open])>summary .docblock>div:first-child::after{padding-top:calc(1.5em + 0.75em - 1.2rem);}details.toggle>summary .docblock{margin-top:0.75em;}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}.src #sidebar-button>a:before,.sidebar-menu-toggle:before{content:url('data:image/svg+xml,\ + ');opacity:0.75;}.sidebar-menu-toggle:hover:before,.sidebar-menu-toggle:active:before,.sidebar-menu-toggle:focus:before{opacity:1;}.src #sidebar-button>a:before{content:url('data:image/svg+xml,\ + \ + \ + ');opacity:0.75;}@media (max-width:850px){#search-tabs .count{display:block;}.side-by-side{flex-direction:column-reverse;}.side-by-side>div{width:auto;}}@media (max-width:700px){:root{--impl-items-indent:0.7em;}*[id]{scroll-margin-top:45px;}#copy-path{width:0;visibility:hidden;}rustdoc-toolbar span.label{display:none;}#settings-menu>a,#help-button>a,button#toggle-all-docs{width:33px;}#settings.popover{--popover-arrow-offset:86px;}#help.popover{--popover-arrow-offset:48px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.sidebar .logo-container,.sidebar .location,.sidebar-resizer{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.src .search-form{margin-left:40px;}.src .main-heading{margin-left:8px;}.hide-sidebar .search-form{margin-left:32px;}.hide-sidebar .src .search-form{margin-left:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;white-space:nowrap;text-overflow:ellipsis;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.hide-sidebar .mobile-topbar{display:none;}.sidebar-menu-toggle{width:45px;border:none;line-height:0;}.hide-sidebar .sidebar-menu-toggle{display:none;}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#sidebar-button>a:before{content:url('data:image/svg+xml,\ + \ + \ + ');width:22px;height:22px;}.sidebar-menu-toggle:before{filter:var(--mobile-sidebar-menu-filter);}.sidebar-menu-toggle:hover{background:var(--main-background-color);}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{position:fixed;max-width:100vw;width:100vw;}.src .src-sidebar-title{padding-top:0;}details.implementors-toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before{left:-20px;}summary>.item-info{margin-left:10px;}.impl-items>.item-info{margin-left:calc(var(--impl-items-indent) + 10px);}.src nav.sub{margin:0 0 -25px 0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}.item-table>li>.item-name{width:33%;}.item-table>li>div{overflow-wrap:anywhere;}}@media print{:root{--docblock-indent:0;}nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}main{padding:10px;}}@media (max-width:464px){:root{--docblock-indent:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example:not(.expanded) .example-wrap::before,.scraped-example:not(.expanded) .example-wrap::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .example-wrap::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .example-wrap::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded){width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded){overflow-x:hidden;}.scraped-example .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;}:root[data-theme="light"],:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#595959;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="dark"]{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#a5a5a5;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(65%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="ayu"]{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--code-example-button-color:#b2b2b2;--code-example-button-hover-color:#fff;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--settings-menu-filter:invert(70%);--settings-menu-hover-filter:invert(100%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);--sidebar-resizer-hover:hsl(34,50%,33%);--sidebar-resizer-active:hsl(34,100%,66%);}:root[data-theme="ayu"] h1,:root[data-theme="ayu"] h2,:root[data-theme="ayu"] h3,:root[data-theme="ayu"] h4,:where(:root[data-theme="ayu"]) h1 a,:root[data-theme="ayu"] .sidebar h2 a,:root[data-theme="ayu"] .sidebar h3 a{color:#fff;}:root[data-theme="ayu"] .docblock code{color:#ffb454;}:root[data-theme="ayu"] .docblock a>code{color:#39AFD7 !important;}:root[data-theme="ayu"] .code-header,:root[data-theme="ayu"] .docblock pre>code,:root[data-theme="ayu"] pre,:root[data-theme="ayu"] pre>code,:root[data-theme="ayu"] .item-info code,:root[data-theme="ayu"] .rustdoc.source .example-wrap{color:#e6e1cf;}:root[data-theme="ayu"] .sidebar .current,:root[data-theme="ayu"] .sidebar .current a,:root[data-theme="ayu"] .sidebar a:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:hover,:root[data-theme="ayu"] details.dir-entry summary:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:focus,:root[data-theme="ayu"] details.dir-entry summary:focus,:root[data-theme="ayu"] #src-sidebar div.files>a.selected{color:#ffb44c;}:root[data-theme="ayu"] .sidebar-elems .location{color:#ff7733;}:root[data-theme="ayu"] .src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}:root[data-theme="ayu"] .search-results a:hover,:root[data-theme="ayu"] .search-results a:focus{color:#fff !important;background-color:#3c3c3c;}:root[data-theme="ayu"] .search-results a{color:#0096cf;}:root[data-theme="ayu"] .search-results a div.desc{color:#c5c5c5;}:root[data-theme="ayu"] .result-name .primitive>i,:root[data-theme="ayu"] .result-name .keyword>i{color:#788797;}:root[data-theme="ayu"] #search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}:root[data-theme="ayu"] #search-tabs>button:not(.selected){border:none;background-color:transparent !important;}:root[data-theme="ayu"] #search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}:root[data-theme="ayu"] #settings-menu>a img,:root[data-theme="ayu"] #sidebar-button>a:before{filter:invert(100);} \ No newline at end of file diff --git a/docs/static.files/scrape-examples-d508a8a9.js b/docs/static.files/scrape-examples-d508a8a9.js new file mode 100644 index 0000000..87b6065 --- /dev/null +++ b/docs/static.files/scrape-examples-d508a8a9.js @@ -0,0 +1 @@ +"use strict";(function(){const DEFAULT_MAX_LINES=5;const HIDDEN_MAX_LINES=10;function scrollToLoc(elt,loc,isHidden){const lines=elt.querySelector(".src-line-numbers > pre");let scrollOffset;const maxLines=isHidden?HIDDEN_MAX_LINES:DEFAULT_MAX_LINES;if(loc[1]-loc[0]>maxLines){const line=Math.max(0,loc[0]-1);scrollOffset=lines.children[line].offsetTop}else{const halfHeight=elt.offsetHeight/2;const offsetTop=lines.children[loc[0]].offsetTop;const lastLine=lines.children[loc[1]];const offsetBot=lastLine.offsetTop+lastLine.offsetHeight;const offsetMid=(offsetTop+offsetBot)/2;scrollOffset=offsetMid-halfHeight}lines.parentElement.scrollTo(0,scrollOffset);elt.querySelector(".rust").scrollTo(0,scrollOffset)}function createScrapeButton(parent,className,content){const button=document.createElement("button");button.className=className;button.innerText=content;parent.insertBefore(button,parent.firstChild);return button}window.updateScrapedExample=(example,buttonHolder)=>{let locIndex=0;const highlights=Array.prototype.slice.call(example.querySelectorAll(".highlight"));const link=example.querySelector(".scraped-example-title a");let expandButton=null;if(!example.classList.contains("expanded")){expandButton=createScrapeButton(buttonHolder,"expand","↕")}const isHidden=example.parentElement.classList.contains("more-scraped-examples");const locs=example.locs;if(locs.length>1){const next=createScrapeButton(buttonHolder,"next","≻");const prev=createScrapeButton(buttonHolder,"prev","≺");const onChangeLoc=changeIndex=>{removeClass(highlights[locIndex],"focus");changeIndex();scrollToLoc(example,locs[locIndex][0],isHidden);addClass(highlights[locIndex],"focus");const url=locs[locIndex][1];const title=locs[locIndex][2];link.href=url;link.innerHTML=title};prev.addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex-1+locs.length)%locs.length})});next.addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex+1)%locs.length})})}if(expandButton){expandButton.addEventListener("click",()=>{if(hasClass(example,"expanded")){removeClass(example,"expanded");scrollToLoc(example,locs[0][0],isHidden)}else{addClass(example,"expanded")}})}};function setupLoc(example,isHidden){example.locs=JSON.parse(example.attributes.getNamedItem("data-locs").textContent);scrollToLoc(example,example.locs[0][0],isHidden)}const firstExamples=document.querySelectorAll(".scraped-example-list > .scraped-example");onEachLazy(firstExamples,el=>setupLoc(el,false));onEachLazy(document.querySelectorAll(".more-examples-toggle"),toggle=>{onEachLazy(toggle.querySelectorAll(".toggle-line, .hide-more"),button=>{button.addEventListener("click",()=>{toggle.open=false})});const moreExamples=toggle.querySelectorAll(".scraped-example");toggle.querySelector("summary").addEventListener("click",()=>{setTimeout(()=>{onEachLazy(moreExamples,el=>setupLoc(el,true))})},{once:true})})})() \ No newline at end of file diff --git a/docs/static.files/scrape-examples-ef1e698c1d417c0c.js b/docs/static.files/scrape-examples-ef1e698c1d417c0c.js deleted file mode 100644 index ba830e3..0000000 --- a/docs/static.files/scrape-examples-ef1e698c1d417c0c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(function(){const DEFAULT_MAX_LINES=5;const HIDDEN_MAX_LINES=10;function scrollToLoc(elt,loc,isHidden){const lines=elt.querySelector(".src-line-numbers");let scrollOffset;const maxLines=isHidden?HIDDEN_MAX_LINES:DEFAULT_MAX_LINES;if(loc[1]-loc[0]>maxLines){const line=Math.max(0,loc[0]-1);scrollOffset=lines.children[line].offsetTop}else{const wrapper=elt.querySelector(".code-wrapper");const halfHeight=wrapper.offsetHeight/2;const offsetTop=lines.children[loc[0]].offsetTop;const lastLine=lines.children[loc[1]];const offsetBot=lastLine.offsetTop+lastLine.offsetHeight;const offsetMid=(offsetTop+offsetBot)/2;scrollOffset=offsetMid-halfHeight}lines.scrollTo(0,scrollOffset);elt.querySelector(".rust").scrollTo(0,scrollOffset)}function updateScrapedExample(example,isHidden){const locs=JSON.parse(example.attributes.getNamedItem("data-locs").textContent);let locIndex=0;const highlights=Array.prototype.slice.call(example.querySelectorAll(".highlight"));const link=example.querySelector(".scraped-example-title a");if(locs.length>1){const onChangeLoc=changeIndex=>{removeClass(highlights[locIndex],"focus");changeIndex();scrollToLoc(example,locs[locIndex][0],isHidden);addClass(highlights[locIndex],"focus");const url=locs[locIndex][1];const title=locs[locIndex][2];link.href=url;link.innerHTML=title};example.querySelector(".prev").addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex-1+locs.length)%locs.length})});example.querySelector(".next").addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex+1)%locs.length})})}const expandButton=example.querySelector(".expand");if(expandButton){expandButton.addEventListener("click",()=>{if(hasClass(example,"expanded")){removeClass(example,"expanded");scrollToLoc(example,locs[0][0],isHidden)}else{addClass(example,"expanded")}})}scrollToLoc(example,locs[0][0],isHidden)}const firstExamples=document.querySelectorAll(".scraped-example-list > .scraped-example");onEachLazy(firstExamples,el=>updateScrapedExample(el,false));onEachLazy(document.querySelectorAll(".more-examples-toggle"),toggle=>{onEachLazy(toggle.querySelectorAll(".toggle-line, .hide-more"),button=>{button.addEventListener("click",()=>{toggle.open=false})});const moreExamples=toggle.querySelectorAll(".scraped-example");toggle.querySelector("summary").addEventListener("click",()=>{setTimeout(()=>{onEachLazy(moreExamples,el=>updateScrapedExample(el,true))})},{once:true})})})() \ No newline at end of file diff --git a/docs/static.files/search-036cda7a.js b/docs/static.files/search-036cda7a.js new file mode 100644 index 0000000..cf59d77 --- /dev/null +++ b/docs/static.files/search-036cda7a.js @@ -0,0 +1,6 @@ +"use strict";if(!Array.prototype.toSpliced){Array.prototype.toSpliced=function(){const me=this.slice();Array.prototype.splice.apply(me,arguments);return me}}function onEachBtwn(arr,func,funcBtwn){let skipped=true;for(const value of arr){if(!skipped){funcBtwn(value)}skipped=func(value)}}const itemTypes=["keyword","primitive","mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","associatedtype","constant","associatedconstant","union","foreigntype","existential","attr","derive","traitalias","generic",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_GENERIC=itemTypes.indexOf("generic");const TY_IMPORT=itemTypes.indexOf("import");const TY_TRAIT=itemTypes.indexOf("trait");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";const UNBOXING_LIMIT=5;const REGEX_IDENT=/\p{ID_Start}\p{ID_Continue}*|_\p{ID_Continue}+/uy;const REGEX_INVALID_TYPE_FILTER=/[^a-z]/ui;const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost,);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1,)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function isEndCharacter(c){return"=,>-])".indexOf(c)!==-1}function isSeparatorCharacter(c){return c===","||c==="="}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function skipWhitespace(parserState){while(parserState.pos0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(c!==" "){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function getFilteredNextElem(query,parserState,elems,isInGenerics){const start=parserState.pos;if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){throw["Expected type filter before ",":"]}getNextElem(query,parserState,elems,isInGenerics);if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}if(elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.normalizedPathLast;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;getNextElem(query,parserState,elems,isInGenerics)}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let foundSeparator=false;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;const oldIsInBinding=parserState.isInBinding;parserState.isInBinding=null;let hofParameters=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===")"){extra="("}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"," after ","="]}hofParameters=[...elems];elems.length=0;parserState.pos+=2;foundStopChar=true;foundSeparator=false;continue}else if(c===" "){parserState.pos+=1;continue}else if(isSeparatorCharacter(c)){parserState.pos+=1;foundStopChar=true;foundSeparator=true;continue}else if(c===":"&&isPathStart(parserState)){throw["Unexpected ","::",": paths cannot start with ","::"]}else if(isEndCharacter(c)){throw["Unexpected ",c," after ",extra]}if(!foundStopChar){let extra=[];if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",",",", ","=",", or ",endChar,...extra,", found ",c,]}throw["Expected ",","," or ","=",...extra,", found ",c,]}const posBefore=parserState.pos;getFilteredNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;if(hofParameters){foundSeparator=false;if([...elems,...hofParameters].some(x=>x.bindingName)||parserState.isInBinding){throw["Unexpected ","="," within ","->"]}const hofElem=makePrimitiveElement("->",{generics:hofParameters,bindings:new Map([["output",[...elems]]]),typeFilter:null,});elems.length=0;elems[0]=hofElem}parserState.typeFilter=oldTypeFilter;parserState.isInBinding=oldIsInBinding;return{foundSeparator}}function getNextElem(query,parserState,elems,isInGenerics){const generics=[];skipWhitespace(parserState);let start=parserState.pos;let end;if("[(".indexOf(parserState.userQuery[parserState.pos])!==-1){let endChar=")";let name="()";let friendlyName="tuple";if(parserState.userQuery[parserState.pos]==="["){endChar="]";name="[]";friendlyName="slice"}parserState.pos+=1;const{foundSeparator}=getItemsBefore(query,parserState,generics,endChar);const typeFilter=parserState.typeFilter;const bindingName=parserState.isInBinding;parserState.typeFilter=null;parserState.isInBinding=null;for(const gen of generics){if(gen.bindingName!==null){throw["Type parameter ","=",` cannot be within ${friendlyName} `,name]}}if(name==="()"&&!foundSeparator&&generics.length===1&&typeFilter===null){elems.push(generics[0])}else if(name==="()"&&generics.length===1&&generics[0].name==="->"){generics[0].typeFilter=typeFilter;elems.push(generics[0])}else{if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive ",name," and ",typeFilter," both specified",]}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}elems.push(makePrimitiveElement(name,{bindingName,generics}))}}else if(parserState.userQuery[parserState.pos]==="&"){if(parserState.typeFilter!==null&&parserState.typeFilter!=="primitive"){throw["Invalid search type: primitive ","&"," and ",parserState.typeFilter," both specified",]}parserState.typeFilter=null;parserState.pos+=1;let c=parserState.userQuery[parserState.pos];while(c===" "&&parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}else if(parserState.pos=end){throw["Found generics without a path"]}if(parserState.isInBinding){throw["Unexpected ","("," after ","="]}parserState.pos+=1;const typeFilter=parserState.typeFilter;parserState.typeFilter=null;getItemsBefore(query,parserState,generics,")");skipWhitespace(parserState);if(isReturnArrow(parserState)){parserState.pos+=2;skipWhitespace(parserState);getFilteredNextElem(query,parserState,generics,isInGenerics);generics[generics.length-1].bindingName=makePrimitiveElement("output")}else{generics.push(makePrimitiveElement(null,{bindingName:makePrimitiveElement("output"),typeFilter:null,}))}parserState.typeFilter=typeFilter}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}if(parserState.userQuery[parserState.pos]==="="){if(parserState.isInBinding){throw["Cannot write ","="," twice in a binding"]}if(!isInGenerics){throw["Type parameter ","="," must be within generics list"]}const name=parserState.userQuery.slice(start,end).trim();if(name==="!"){throw["Type parameter ","="," key cannot be ","!"," never type"]}if(name.includes("!")){throw["Type parameter ","="," key cannot be ","!"," macro"]}if(name.includes("::")){throw["Type parameter ","="," key cannot contain ","::"," path"]}if(name.includes(":")){throw["Type parameter ","="," key cannot contain ",":"," type"]}parserState.isInBinding={name,generics}}else{elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics,),)}}}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();const match=query.match(REGEX_INVALID_TYPE_FILTER);if(match){throw["Unexpected ",match[0]," in type filter (before ",":",")",]}}function createQueryElement(query,parserState,name,generics,isInGenerics){const path=name.trim();if(path.length===0&&generics.length===0){throw["Unexpected ",parserState.userQuery[parserState.pos]]}if(query.literalSearch&&parserState.totalElems-parserState.genericsElems>0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name.trim()==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}const bindingName=parserState.isInBinding;parserState.isInBinding=null;return makePrimitiveElement("never",{bindingName})}const quadcolon=/::\s*::/.exec(path);if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(quadcolon!==null){throw["Unexpected ",quadcolon[0]]}const pathSegments=path.split(/(?:::\s*)|(?:\s+(?:::\s*)?)/).map(x=>x.toLowerCase());if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}const bindingName=parserState.isInBinding;parserState.isInBinding=null;const bindings=new Map();const pathLast=pathSegments[pathSegments.length-1];return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast,normalizedPathLast:pathLast.replace(/_/g,""),generics:generics.filter(gen=>{if(gen.bindingName!==null){if(gen.name!==null){gen.bindingName.generics.unshift(gen)}bindings.set(gen.bindingName.name.toLowerCase().replace(/_/g,""),gen.bindingName.generics,);return false}return true}),bindings,typeFilter,bindingName,}}function makePrimitiveElement(name,extra){return Object.assign({name,id:null,fullPath:[name],pathWithoutLast:[],pathLast:name,normalizedPathLast:name,generics:[],bindings:new Map(),typeFilter:"primitive",bindingName:null,},extra)}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function getIdentEndPosition(parserState){let afterIdent=consumeIdent(parserState);let end=parserState.pos;let macroExclamation=-1;while(parserState.pos0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]," (not a valid identifier)"]}else{throw["Unexpected ",c," (not a valid identifier)"]}parserState.pos+=1;afterIdent=consumeIdent(parserState);end=parserState.pos}if(macroExclamation!==-1){if(parserState.typeFilter===null){parserState.typeFilter="macro"}else if(parserState.typeFilter!=="macro"){throw["Invalid search type: macro ","!"," and ",parserState.typeFilter," both specified",]}end=macroExclamation}return end}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function consumeIdent(parserState){REGEX_IDENT.lastIndex=parserState.pos;const match=parserState.userQuery.match(REGEX_IDENT);if(match){parserState.pos+=match[0].length;return true}return false}function isPathSeparator(c){return c===":"||c===" "}class VlqHexDecoder{constructor(string,cons){this.string=string;this.cons=cons;this.offset=0;this.backrefQueue=[]}decodeList(){let c=this.string.charCodeAt(this.offset);const ret=[];while(c!==125){ret.push(this.decode());c=this.string.charCodeAt(this.offset)}this.offset+=1;return ret}decode(){let n=0;let c=this.string.charCodeAt(this.offset);if(c===123){this.offset+=1;return this.decodeList()}while(c<96){n=(n<<4)|(c&0xF);this.offset+=1;c=this.string.charCodeAt(this.offset)}n=(n<<4)|(c&0xF);const[sign,value]=[n&1,n>>1];this.offset+=1;return sign?-value:value}next(){const c=this.string.charCodeAt(this.offset);if(c>=48&&c<64){this.offset+=1;return this.backrefQueue[c-48]}if(c===96){this.offset+=1;return this.cons(0)}const result=this.cons(this.decode());this.backrefQueue.unshift(result);if(this.backrefQueue.length>16){this.backrefQueue.pop()}return result}}class RoaringBitmap{constructor(str){const strdecoded=atob(str);const u8array=new Uint8Array(strdecoded.length);for(let j=0;j=4){offsets=[];for(let j=0;j>3]&(1<<(j&0x7))){const runcount=(u8array[i]|(u8array[i+1]<<8));i+=2;this.containers.push(new RoaringBitmapRun(runcount,u8array.slice(i,i+(runcount*4)),));i+=runcount*4}else if(this.cardinalities[j]>=4096){this.containers.push(new RoaringBitmapBits(u8array.slice(i,i+8192)));i+=8192}else{const end=this.cardinalities[j]*2;this.containers.push(new RoaringBitmapArray(this.cardinalities[j],u8array.slice(i,i+end),));i+=end}}}contains(keyvalue){const key=keyvalue>>16;const value=keyvalue&0xFFFF;let left=0;let right=this.keys.length-1;while(left<=right){const mid=Math.floor((left+right)/2);const x=this.keys[mid];if(xkey){right=mid-1}else{return this.containers[mid].contains(value)}}return false}}class RoaringBitmapRun{constructor(runcount,array){this.runcount=runcount;this.array=array}contains(value){let left=0;let right=this.runcount-1;while(left<=right){const mid=Math.floor((left+right)/2);const i=mid*4;const start=this.array[i]|(this.array[i+1]<<8);const lenm1=this.array[i+2]|(this.array[i+3]<<8);if((start+lenm1)value){right=mid-1}else{return true}}return false}}class RoaringBitmapArray{constructor(cardinality,array){this.cardinality=cardinality;this.array=array}contains(value){let left=0;let right=this.cardinality-1;while(left<=right){const mid=Math.floor((left+right)/2);const i=mid*2;const x=this.array[i]|(this.array[i+1]<<8);if(xvalue){right=mid-1}else{return true}}return false}}class RoaringBitmapBits{constructor(array){this.array=array}contains(value){return!!(this.array[value>>3]&(1<<(value&7)))}}class NameTrie{constructor(){this.children=[];this.matches=[]}insert(name,id,tailTable){this.insertSubstring(name,0,id,tailTable)}insertSubstring(name,substart,id,tailTable){const l=name.length;if(substart===l){this.matches.push(id)}else{const sb=name.charCodeAt(substart);let child;if(this.children[sb]!==undefined){child=this.children[sb]}else{child=new NameTrie();this.children[sb]=child;let sste;if(substart>=2){const tail=name.substring(substart-2,substart+1);if(tailTable.has(tail)){sste=tailTable.get(tail)}else{sste=[];tailTable.set(tail,sste)}sste.push(child)}}child.insertSubstring(name,substart+1,id,tailTable)}}search(name,tailTable){const results=new Set();this.searchSubstringPrefix(name,0,results);if(results.size=3){const levParams=name.length>=6?new Lev2TParametricDescription(name.length):new Lev1TParametricDescription(name.length);this.searchLev(name,0,levParams,results);const tail=name.substring(0,3);if(tailTable.has(tail)){for(const entry of tailTable.get(tail)){entry.searchSubstringPrefix(name,3,results)}}}return[...results]}searchSubstringPrefix(name,substart,results){const l=name.length;if(substart===l){for(const match of this.matches){results.add(match)}let unprocessedChildren=[];for(const child of this.children){if(child){unprocessedChildren.push(child)}}let nextSet=[];while(unprocessedChildren.length!==0){const next=unprocessedChildren.pop();for(const child of next.children){if(child){nextSet.push(child)}}for(const match of next.matches){results.add(match)}if(unprocessedChildren.length===0){const tmp=unprocessedChildren;unprocessedChildren=nextSet;nextSet=tmp}}}else{const sb=name.charCodeAt(substart);if(this.children[sb]!==undefined){this.children[sb].searchSubstringPrefix(name,substart+1,results)}}}searchLev(name,substart,levParams,results){const stack=[[this,0]];const n=levParams.n;while(stack.length!==0){const[trie,levState]=stack.pop();for(const[charCode,child]of trie.children.entries()){if(!child){continue}const levPos=levParams.getPosition(levState);const vector=levParams.getVector(name,charCode,levPos,Math.min(name.length,levPos+(2*n)+1),);const newLevState=levParams.transition(levState,levPos,vector,);if(newLevState>=0){stack.push([child,newLevState]);if(levParams.isAccept(newLevState)){for(const match of child.matches){results.add(match)}}}}}}}class DocSearch{constructor(rawSearchIndex,rootPath,searchState){this.searchIndexDeprecated=new Map();this.searchIndexEmptyDesc=new Map();this.functionTypeFingerprint=null;this.typeNameIdMap=new Map();this.assocTypeIdNameMap=new Map();this.ALIASES=new Map();this.rootPath=rootPath;this.searchState=searchState;this.typeNameIdOfArray=this.buildTypeMapIndex("array");this.typeNameIdOfSlice=this.buildTypeMapIndex("slice");this.typeNameIdOfArrayOrSlice=this.buildTypeMapIndex("[]");this.typeNameIdOfTuple=this.buildTypeMapIndex("tuple");this.typeNameIdOfUnit=this.buildTypeMapIndex("unit");this.typeNameIdOfTupleOrUnit=this.buildTypeMapIndex("()");this.typeNameIdOfFn=this.buildTypeMapIndex("fn");this.typeNameIdOfFnMut=this.buildTypeMapIndex("fnmut");this.typeNameIdOfFnOnce=this.buildTypeMapIndex("fnonce");this.typeNameIdOfHof=this.buildTypeMapIndex("->");this.typeNameIdOfOutput=this.buildTypeMapIndex("output",true);this.typeNameIdOfReference=this.buildTypeMapIndex("reference");this.EMPTY_BINDINGS_MAP=new Map();this.EMPTY_GENERICS_ARRAY=[];this.TYPES_POOL=new Map();this.nameTrie=new NameTrie();this.tailTable=new Map();this.searchIndex=this.buildIndex(rawSearchIndex)}buildTypeMapIndex(name,isAssocType){if(name===""||name===null){return null}if(this.typeNameIdMap.has(name)){const obj=this.typeNameIdMap.get(name);obj.assocOnly=isAssocType&&obj.assocOnly;return obj.id}else{const id=this.typeNameIdMap.size;this.typeNameIdMap.set(name,{id,assocOnly:isAssocType});return id}}buildItemSearchTypeAll(types,paths,lowercasePaths){return types.length>0?types.map(type=>this.buildItemSearchType(type,paths,lowercasePaths)):this.EMPTY_GENERICS_ARRAY}buildItemSearchType(type,paths,lowercasePaths,isAssocType){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;const BINDINGS_DATA=2;let pathIndex,generics,bindings;if(typeof type==="number"){pathIndex=type;generics=this.EMPTY_GENERICS_ARRAY;bindings=this.EMPTY_BINDINGS_MAP}else{pathIndex=type[PATH_INDEX_DATA];generics=this.buildItemSearchTypeAll(type[GENERICS_DATA],paths,lowercasePaths,);if(type.length>BINDINGS_DATA&&type[BINDINGS_DATA].length>0){bindings=new Map(type[BINDINGS_DATA].map(binding=>{const[assocType,constraints]=binding;return[this.buildItemSearchType(assocType,paths,lowercasePaths,true).id,this.buildItemSearchTypeAll(constraints,paths,lowercasePaths),]}))}else{bindings=this.EMPTY_BINDINGS_MAP}}let result;if(pathIndex<0){result={id:pathIndex,name:"",ty:TY_GENERIC,path:null,exactPath:null,generics,bindings,unboxFlag:true,}}else if(pathIndex===0){result={id:null,name:"",ty:null,path:null,exactPath:null,generics,bindings,unboxFlag:true,}}else{const item=lowercasePaths[pathIndex-1];const id=this.buildTypeMapIndex(item.name,isAssocType);if(isAssocType){this.assocTypeIdNameMap.set(id,paths[pathIndex-1].name)}result={id,name:paths[pathIndex-1].name,ty:item.ty,path:item.path,exactPath:item.exactPath,generics,bindings,unboxFlag:item.unboxFlag,}}const cr=this.TYPES_POOL.get(result.id);if(cr){if(cr.generics.length===result.generics.length&&cr.generics!==result.generics&&cr.generics.every((x,i)=>result.generics[i]===x)){result.generics=cr.generics}if(cr.bindings.size===result.bindings.size&&cr.bindings!==result.bindings){let ok=true;for(const[k,v]of cr.bindings.entries()){const v2=result.bindings.get(v);if(!v2){ok=false;break}if(v!==v2&&v.length===v2.length&&v.every((x,i)=>v2[i]===x)){result.bindings.set(k,v)}else if(v!==v2){ok=false;break}}if(ok){result.bindings=cr.bindings}}if(cr.ty===result.ty&&cr.path===result.path&&cr.bindings===result.bindings&&cr.generics===result.generics&&cr.ty===result.ty&&cr.name===result.name&&cr.unboxFlag===result.unboxFlag){return cr}}this.TYPES_POOL.set(result.id,result);return result}buildFunctionTypeFingerprint(type,output){let input=type.id;if(input===this.typeNameIdOfArray||input===this.typeNameIdOfSlice){input=this.typeNameIdOfArrayOrSlice}if(input===this.typeNameIdOfTuple||input===this.typeNameIdOfUnit){input=this.typeNameIdOfTupleOrUnit}if(input===this.typeNameIdOfFn||input===this.typeNameIdOfFnMut||input===this.typeNameIdOfFnOnce){input=this.typeNameIdOfHof}const hashint1=k=>{k=(~~k+0x7ed55d16)+(k<<12);k=(k ^ 0xc761c23c)^(k>>>19);k=(~~k+0x165667b1)+(k<<5);k=(~~k+0xd3a2646c)^(k<<9);k=(~~k+0xfd7046c5)+(k<<3);return(k ^ 0xb55a4f09)^(k>>>16)};const hashint2=k=>{k=~k+(k<<15);k ^=k>>>12;k+=k<<2;k ^=k>>>4;k=Math.imul(k,2057);return k ^(k>>16)};if(input!==null){const h0a=hashint1(input);const h0b=hashint2(input);const h1a=~~(h0a+Math.imul(h0b,2));const h1b=~~(h0a+Math.imul(h0b,3));const h2a=~~(h0a+Math.imul(h0b,4));const h2b=~~(h0a+Math.imul(h0b,5));output[0]|=(1<<(h0a%32))|(1<<(h1b%32));output[1]|=(1<<(h1a%32))|(1<<(h2b%32));output[2]|=(1<<(h2a%32))|(1<<(h0b%32));output[3]+=1}for(const g of type.generics){this.buildFunctionTypeFingerprint(g,output)}const fb={id:null,ty:0,generics:this.EMPTY_GENERICS_ARRAY,bindings:this.EMPTY_BINDINGS_MAP,};for(const[k,v]of type.bindings.entries()){fb.id=k;fb.generics=v;this.buildFunctionTypeFingerprint(fb,output)}}buildIndex(rawSearchIndex){const buildFunctionSearchTypeCallback=(paths,lowercasePaths)=>{return functionSearchType=>{if(functionSearchType===0){return null}const INPUTS_DATA=0;const OUTPUT_DATA=1;let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[this.buildItemSearchType(functionSearchType[INPUTS_DATA],paths,lowercasePaths,),]}else{inputs=this.buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],paths,lowercasePaths,)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[this.buildItemSearchType(functionSearchType[OUTPUT_DATA],paths,lowercasePaths,),]}else{output=this.buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],paths,lowercasePaths,)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;inoop);let descShard={crate,shard:0,start:0,len:itemDescShardDecoder.next(),promise:null,resolve:null,};const descShardList=[descShard];this.searchIndexDeprecated.set(crate,new RoaringBitmap(crateCorpus.c));this.searchIndexEmptyDesc.set(crate,new RoaringBitmap(crateCorpus.e));let descIndex=0;let lastParamNames=[];let normalizedName=crate.indexOf("_")===-1?crate:crate.replace(/_/g,"");const crateRow={crate,ty:3,name:crate,path:"",descShard,descIndex,exactPath:"",desc:crateCorpus.doc,parent:undefined,type:null,paramNames:lastParamNames,id,word:crate,normalizedName,bitIndex:0,implDisambiguator:null,};this.nameTrie.insert(normalizedName,id,this.tailTable);id+=1;searchIndex.push(crateRow);currentIndex+=1;if(!this.searchIndexEmptyDesc.get(crate).contains(0)){descIndex+=1}const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemReexports=new Map(crateCorpus.r);const itemParentIdxDecoder=new VlqHexDecoder(crateCorpus.i,noop=>noop);const implDisambiguator=new Map(crateCorpus.b);const paths=crateCorpus.p;const aliases=crateCorpus.a;const itemParamNames=new Map(crateCorpus.P);const lowercasePaths=[];const itemFunctionDecoder=new VlqHexDecoder(crateCorpus.f,buildFunctionSearchTypeCallback(paths,lowercasePaths),);let len=paths.length;let lastPath=itemPaths.get(0);for(let i=0;i2&&elem[2]!==null){path=itemPaths.has(elem[2])?itemPaths.get(elem[2]):lastPath;lastPath=path}const exactPath=elem.length>3&&elem[3]!==null?itemPaths.get(elem[3]):path;const unboxFlag=elem.length>4&&!!elem[4];lowercasePaths.push({ty,name:name.toLowerCase(),path,exactPath,unboxFlag});paths[i]={ty,name,path,exactPath,unboxFlag}}lastPath="";len=itemTypes.length;let lastName="";let lastWord="";for(let i=0;i=descShard.len&&!this.searchIndexEmptyDesc.get(crate).contains(bitIndex)){descShard={crate,shard:descShard.shard+1,start:descShard.start+descShard.len,len:itemDescShardDecoder.next(),promise:null,resolve:null,};descIndex=0;descShardList.push(descShard)}const name=itemNames[i]===""?lastName:itemNames[i];const word=itemNames[i]===""?lastWord:itemNames[i].toLowerCase();const path=itemPaths.has(i)?itemPaths.get(i):lastPath;const paramNames=itemParamNames.has(i)?itemParamNames.get(i).split(","):lastParamNames;const type=itemFunctionDecoder.next();if(type!==null){if(type){const fp=this.functionTypeFingerprint.subarray(id*4,(id+1)*4);for(const t of type.inputs){this.buildFunctionTypeFingerprint(t,fp)}for(const t of type.output){this.buildFunctionTypeFingerprint(t,fp)}for(const w of type.where_clause){for(const t of w){this.buildFunctionTypeFingerprint(t,fp)}}}}const itemParentIdx=itemParentIdxDecoder.next();normalizedName=word.indexOf("_")===-1?word:word.replace(/_/g,"");const row={crate,ty:itemTypes.charCodeAt(i)-65,name,path,descShard,descIndex,exactPath:itemReexports.has(i)?itemPaths.get(itemReexports.get(i)):path,parent:itemParentIdx>0?paths[itemParentIdx-1]:undefined,type,paramNames,id,word,normalizedName,bitIndex,implDisambiguator:implDisambiguator.has(i)?implDisambiguator.get(i):null,};this.nameTrie.insert(normalizedName,id,this.tailTable);id+=1;searchIndex.push(row);lastPath=row.path;lastParamNames=row.paramNames;if(!this.searchIndexEmptyDesc.get(crate).contains(bitIndex)){descIndex+=1}lastName=name;lastWord=word}if(aliases){const currentCrateAliases=new Map();this.ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!Object.prototype.hasOwnProperty.call(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=itemTypes.length;this.searchState.descShards.set(crate,descShardList)}this.TYPES_POOL=new Map();return searchIndex}static parseQuery(userQuery){function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}for(const constraints of elem.bindings.values()){for(const constraint of constraints){convertTypeFilterOnElem(constraint)}}}function newParsedQuery(userQuery){return{userQuery,elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,hasReturnArrow:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,typeFingerprint:new Uint32Array(4),}}function parseInput(query,parserState){let foundStopChar=true;while(parserState.pos"){if(isReturnArrow(parserState)){query.hasReturnArrow=true;break}throw["Unexpected ",c," (did you mean ","->","?)"]}else if(parserState.pos>0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]]}throw["Unexpected ",c]}else if(c===" "){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;getFilteredNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}async execQuery(parsedQuery,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}const buildHrefAndPath=item=>{let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;let exactPath=item.exactPath;if(type==="mod"){displayPath=path+"::";href=this.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=this.rootPath+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";exactPath="";href=this.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=this.rootPath+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor=type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;exactPath=`${myparent.exactPath}::${myparent.name}`;if(parentType==="primitive"){displayPath=myparent.name+"::";exactPath=myparent.name}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}if(item.implDisambiguator!==null){anchor=item.implDisambiguator+"/"+anchor}href=this.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html#"+anchor}else{displayPath=item.path+"::";href=this.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href,`${exactPath}::${name}`]};function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}const transformResults=(results,typeInfo)=>{const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const res=buildHrefAndPath(this.searchIndex[result.id]);const obj=Object.assign({dist:result.dist,displayPath:pathSplitter(res[0]),},this.searchIndex[result.id]);obj.fullPath=res[2]+"|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}if(obj.ty===TY_IMPORT&&duplicates.has(res[2])){continue}if(duplicates.has(res[2]+"|"+TY_IMPORT)){continue}duplicates.add(obj.fullPath);duplicates.add(res[2]);if(typeInfo!==null){obj.displayTypeSignature=this.formatDisplayTypeSignature(obj,typeInfo)}obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out};this.formatDisplayTypeSignature=async(obj,typeInfo)=>{let fnInputs=null;let fnOutput=null;let mgens=null;if(typeInfo!=="elems"&&typeInfo!=="returned"){fnInputs=unifyFunctionTypes(obj.type.inputs,parsedQuery.elems,obj.type.where_clause,null,mgensScratch=>{fnOutput=unifyFunctionTypes(obj.type.output,parsedQuery.returned,obj.type.where_clause,mgensScratch,mgensOut=>{mgens=mgensOut;return true},0,);return!!fnOutput},0,)}else{const arr=typeInfo==="elems"?obj.type.inputs:obj.type.output;const highlighted=unifyFunctionTypes(arr,parsedQuery.elems,obj.type.where_clause,null,mgensOut=>{mgens=mgensOut;return true},0,);if(typeInfo==="elems"){fnInputs=highlighted}else{fnOutput=highlighted}}if(!fnInputs){fnInputs=obj.type.inputs}if(!fnOutput){fnOutput=obj.type.output}const mappedNames=new Map();const whereClause=new Map();const fnParamNames=obj.paramNames;const queryParamNames=[];const remapQuery=queryElem=>{if(queryElem.id<0){queryParamNames[-1-queryElem.id]=queryElem.name}if(queryElem.generics.length>0){queryElem.generics.forEach(remapQuery)}if(queryElem.bindings.size>0){[...queryElem.bindings.values()].flat().forEach(remapQuery)}};parsedQuery.elems.forEach(remapQuery);parsedQuery.returned.forEach(remapQuery);const pushText=(fnType,result)=>{if(!!(result.length%2)===!!fnType.highlighted){result.push("")}else if(result.length===0&&!!fnType.highlighted){result.push("");result.push("")}result[result.length-1]+=fnType.name};const writeHof=(fnType,result)=>{const hofOutput=fnType.bindings.get(this.typeNameIdOfOutput)||[];const hofInputs=fnType.generics;pushText(fnType,result);pushText({name:" (",highlighted:false},result);let needsComma=false;for(const fnType of hofInputs){if(needsComma){pushText({name:", ",highlighted:false},result)}needsComma=true;writeFn(fnType,result)}pushText({name:hofOutput.length===0?")":") -> ",highlighted:false,},result);if(hofOutput.length>1){pushText({name:"(",highlighted:false},result)}needsComma=false;for(const fnType of hofOutput){if(needsComma){pushText({name:", ",highlighted:false},result)}needsComma=true;writeFn(fnType,result)}if(hofOutput.length>1){pushText({name:")",highlighted:false},result)}};const writeSpecialPrimitive=(fnType,result)=>{if(fnType.id===this.typeNameIdOfArray||fnType.id===this.typeNameIdOfSlice||fnType.id===this.typeNameIdOfTuple||fnType.id===this.typeNameIdOfUnit){const[ob,sb]=fnType.id===this.typeNameIdOfArray||fnType.id===this.typeNameIdOfSlice?["[","]"]:["(",")"];pushText({name:ob,highlighted:fnType.highlighted},result);onEachBtwn(fnType.generics,nested=>writeFn(nested,result),()=>pushText({name:", ",highlighted:false},result),);pushText({name:sb,highlighted:fnType.highlighted},result);return true}else if(fnType.id===this.typeNameIdOfReference){pushText({name:"&",highlighted:fnType.highlighted},result);let prevHighlighted=false;onEachBtwn(fnType.generics,value=>{prevHighlighted=value.highlighted;writeFn(value,result)},value=>pushText({name:" ",highlighted:prevHighlighted&&value.highlighted,},result),);return true}else if(fnType.id===this.typeNameIdOfFn){writeHof(fnType,result);return true}return false};const writeFn=(fnType,result)=>{if(fnType.id<0){if(fnParamNames[-1-fnType.id]===""){const generics=fnType.generics.length>0?fnType.generics:obj.type.where_clause[-1-fnType.id];for(const nested of generics){writeFn(nested,result)}return}else if(mgens){for(const[queryId,fnId]of mgens){if(fnId===fnType.id){mappedNames.set(queryParamNames[-1-queryId],fnParamNames[-1-fnType.id],)}}}pushText({name:fnParamNames[-1-fnType.id],highlighted:!!fnType.highlighted,},result);const where=[];onEachBtwn(fnType.generics,nested=>writeFn(nested,where),()=>pushText({name:" + ",highlighted:false},where),);if(where.length>0){whereClause.set(fnParamNames[-1-fnType.id],where)}}else{if(fnType.ty===TY_PRIMITIVE){if(writeSpecialPrimitive(fnType,result)){return}}else if(fnType.ty===TY_TRAIT&&(fnType.id===this.typeNameIdOfFn||fnType.id===this.typeNameIdOfFnMut||fnType.id===this.typeNameIdOfFnOnce)){writeHof(fnType,result);return}pushText(fnType,result);let hasBindings=false;if(fnType.bindings.size>0){onEachBtwn(fnType.bindings,([key,values])=>{const name=this.assocTypeIdNameMap.get(key);if(values.length===1&&values[0].id<0&&`${fnType.name}::${name}`===fnParamNames[-1-values[0].id]){for(const value of values){writeFn(value,[])}return true}if(!hasBindings){hasBindings=true;pushText({name:"<",highlighted:false},result)}pushText({name,highlighted:false},result);pushText({name:values.length!==1?"=(":"=",highlighted:false,},result);onEachBtwn(values||[],value=>writeFn(value,result),()=>pushText({name:" + ",highlighted:false},result),);if(values.length!==1){pushText({name:")",highlighted:false},result)}},()=>pushText({name:", ",highlighted:false},result),)}if(fnType.generics.length>0){pushText({name:hasBindings?", ":"<",highlighted:false},result)}onEachBtwn(fnType.generics,value=>writeFn(value,result),()=>pushText({name:", ",highlighted:false},result),);if(hasBindings||fnType.generics.length>0){pushText({name:">",highlighted:false},result)}}};const type=[];onEachBtwn(fnInputs,fnType=>writeFn(fnType,type),()=>pushText({name:", ",highlighted:false},type),);pushText({name:" -> ",highlighted:false},type);onEachBtwn(fnOutput,fnType=>writeFn(fnType,type),()=>pushText({name:", ",highlighted:false},type),);return{type,mappedNames,whereClause}};const sortResults=async(results,typeInfo,preferredCrate)=>{const userQuery=parsedQuery.userQuery;const normalizedUserQuery=parsedQuery.userQuery.toLowerCase();const isMixedCase=normalizedUserQuery!==userQuery;const result_list=[];for(const result of results.values()){result.item=this.searchIndex[result.id];result.word=this.searchIndex[result.id].word;result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;if(isMixedCase){a=(aaa.item.name!==userQuery);b=(bbb.item.name!==userQuery);if(a!==b){return a-b}}a=(aaa.word!==normalizedUserQuery);b=(bbb.word!==normalizedUserQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=this.searchIndexDeprecated.get(aaa.item.crate).contains(aaa.item.bitIndex);b=this.searchIndexDeprecated.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=this.searchIndexEmptyDesc.get(aaa.item.crate).contains(aaa.item.bitIndex);b=this.searchIndexEmptyDesc.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});return transformResults(result_list,typeInfo)};function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return null}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return solutionCb(mgens)?fnTypesIn:null}if(!fnTypesIn||fnTypesIn.length===0){return null}const ql=queryElems.length;const fl=fnTypesIn.length;if(ql===1&&queryElems[0].generics.length===0&&queryElems[0].bindings.size===0){const queryElem=queryElems[0];for(const[i,fnType]of fnTypesIn.entries()){if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}if(fnType.id<0&&queryElem.id<0){if(mgens&&mgens.has(queryElem.id)&&mgens.get(queryElem.id)!==fnType.id){continue}const mgensScratch=new Map(mgens);mgensScratch.set(queryElem.id,fnType.id);if(!solutionCb||solutionCb(mgensScratch)){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:whereClause[-1-fnType.id],});return highlighted}}else if(solutionCb(mgens?new Map(mgens):null)){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:unifyGenericTypes(fnType.generics,queryElem.generics,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth,)||fnType.generics,});return highlighted}}for(const[i,fnType]of fnTypesIn.entries()){if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}if(fnType.id<0){const highlightedGenerics=unifyFunctionTypes(whereClause[(-fnType.id)-1],queryElems,whereClause,mgens,solutionCb,unboxingDepth+1,);if(highlightedGenerics){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:highlightedGenerics,});return highlighted}}else{const highlightedGenerics=unifyFunctionTypes([...Array.from(fnType.bindings.values()).flat(),...fnType.generics],queryElems,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth+1,);if(highlightedGenerics){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),});return highlighted}}}return false}const fnTypes=fnTypesIn.slice();const flast=fl-1;const qlast=ql-1;const queryElem=queryElems[qlast];let queryElemsTmp=null;for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}let mgensScratch;if(fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(queryElem.id)&&mgensScratch.get(queryElem.id)!==fnType.id){continue}mgensScratch.set(queryElem.id,fnType.id)}else{mgensScratch=mgens}fnTypes[i]=fnTypes[flast];fnTypes.length=flast;if(!queryElemsTmp){queryElemsTmp=queryElems.slice(0,qlast)}let unifiedGenerics=[];let unifiedGenericsMgens=null;const passesUnification=unifyFunctionTypes(fnTypes,queryElemsTmp,whereClause,mgensScratch,mgensScratch=>{if(fnType.generics.length===0&&queryElem.generics.length===0&&fnType.bindings.size===0&&queryElem.bindings.size===0){return solutionCb(mgensScratch)}const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){unifiedGenerics=unifyGenericTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,);if(unifiedGenerics!==null){unifiedGenericsMgens=simplifiedMgens;return true}}return false},unboxingDepth,);if(passesUnification){passesUnification.length=fl;passesUnification[flast]=passesUnification[i];passesUnification[i]=Object.assign({},fnType,{highlighted:true,generics:unifiedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,queryElem.bindings.has(k)?unifyFunctionTypes(v,queryElem.bindings.get(k),whereClause,unifiedGenericsMgens,solutionCb,unboxingDepth,):unifiedGenerics.splice(0,v.length)]})),});return passesUnification}fnTypes[flast]=fnTypes[i];fnTypes[i]=fnType;fnTypes.length=fl}for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}const generics=fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;const bindings=fnType.bindings?Array.from(fnType.bindings.values()).flat():[];const passesUnification=unifyFunctionTypes(fnTypes.toSpliced(i,1,...bindings,...generics),queryElems,whereClause,mgens,solutionCb,unboxingDepth+1,);if(passesUnification){const highlightedGenerics=passesUnification.slice(i,i+generics.length+bindings.length,);const highlightedFnType=Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),});return passesUnification.toSpliced(i,generics.length+bindings.length,highlightedFnType,)}}return null}function unifyGenericTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return null}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return solutionCb(mgens)?fnTypesIn:null}if(!fnTypesIn||fnTypesIn.length===0){return null}const fnType=fnTypesIn[0];const queryElem=queryElems[0];if(unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){if(fnType.id<0&&queryElem.id<0){if(!mgens||!mgens.has(queryElem.id)||mgens.get(queryElem.id)===fnType.id){const mgensScratch=new Map(mgens);mgensScratch.set(queryElem.id,fnType.id);const fnTypesRemaining=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(fnTypesRemaining){const highlighted=[fnType,...fnTypesRemaining];highlighted[0]=Object.assign({highlighted:true,},fnType,{generics:whereClause[-1-fnType.id],});return highlighted}}}else{let unifiedGenerics;const fnTypesRemaining=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgens,mgensScratch=>{const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){unifiedGenerics=unifyGenericTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,);if(unifiedGenerics!==null){return true}}},unboxingDepth,);if(fnTypesRemaining){const highlighted=[fnType,...fnTypesRemaining];highlighted[0]=Object.assign({highlighted:true,},fnType,{generics:unifiedGenerics||fnType.generics,});return highlighted}}}if(unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){let highlightedRemaining;if(fnType.id<0){const highlightedGenerics=unifyFunctionTypes(whereClause[(-fnType.id)-1],[queryElem],whereClause,mgens,mgensScratch=>{const hl=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(hl){highlightedRemaining=hl}return hl},unboxingDepth+1,);if(highlightedGenerics){return[Object.assign({highlighted:true,},fnType,{generics:highlightedGenerics,}),...highlightedRemaining]}}else{const highlightedGenerics=unifyGenericTypes([...Array.from(fnType.bindings.values()).flat(),...fnType.generics,],[queryElem],whereClause,mgens,mgensScratch=>{const hl=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(hl){highlightedRemaining=hl}return hl},unboxingDepth+1,);if(highlightedGenerics){return[Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),}),...highlightedRemaining]}}}return null}const unifyFunctionTypeIsMatchCandidate=(fnType,queryElem,mgensIn)=>{if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id<0&&queryElem.id<0){if(mgensIn&&mgensIn.has(queryElem.id)&&mgensIn.get(queryElem.id)!==fnType.id){return false}return true}else{if(queryElem.id===this.typeNameIdOfArrayOrSlice&&(fnType.id===this.typeNameIdOfSlice||fnType.id===this.typeNameIdOfArray)){}else if(queryElem.id===this.typeNameIdOfTupleOrUnit&&(fnType.id===this.typeNameIdOfTuple||fnType.id===this.typeNameIdOfUnit)){}else if(queryElem.id===this.typeNameIdOfHof&&(fnType.id===this.typeNameIdOfFn||fnType.id===this.typeNameIdOfFnMut||fnType.id===this.typeNameIdOfFnOnce)){}else if(fnType.id!==queryElem.id||queryElem.id===null){return false}if((fnType.generics.length+fnType.bindings.size)===0&&queryElem.generics.length!==0){return false}if(fnType.bindings.size0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i0){let mgensSolutionSet=[mgensIn];for(const[name,constraints]of queryElem.bindings.entries()){if(mgensSolutionSet.length===0){return false}if(!fnType.bindings.has(name)){return false}const fnTypeBindings=fnType.bindings.get(name);mgensSolutionSet=mgensSolutionSet.flatMap(mgens=>{const newSolutions=[];unifyFunctionTypes(fnTypeBindings,constraints,whereClause,mgens,newMgens=>{newSolutions.push(newMgens);return false},unboxingDepth,);return newSolutions})}if(mgensSolutionSet.length===0){return false}const binds=Array.from(fnType.bindings.entries()).flatMap(entry=>{const[name,constraints]=entry;if(queryElem.bindings.has(name)){return[]}else{return constraints}});if(simplifiedGenerics.length>0){simplifiedGenerics=[...binds,...simplifiedGenerics]}else{simplifiedGenerics=binds}return{simplifiedGenerics,mgens:mgensSolutionSet}}return{simplifiedGenerics,mgens:[mgensIn]}}function unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return false}if(fnType.id<0){if(!whereClause){return false}return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause,mgens,unboxingDepth,)}else if(fnType.unboxFlag&&(fnType.generics.length>0||fnType.bindings.size>0)){const simplifiedGenerics=[...fnType.generics,...Array.from(fnType.bindings.values()).flat(),];return checkIfInList(simplifiedGenerics,queryElem,whereClause,mgens,unboxingDepth,)}return false}function checkIfInList(list,elem,whereClause,mgens,unboxingDepth){for(const entry of list){if(checkType(entry,elem,whereClause,mgens,unboxingDepth)){return true}}return false}const checkType=(row,elem,whereClause,mgens,unboxingDepth)=>{if(unboxingDepth>=UNBOXING_LIMIT){return false}if(row.id>0&&elem.id>0&&elem.pathWithoutLast.length===0&&row.generics.length===0&&elem.generics.length===0&&row.bindings.size===0&&elem.bindings.size===0&&elem.id!==this.typeNameIdOfArrayOrSlice&&elem.id!==this.typeNameIdOfHof&&elem.id!==this.typeNameIdOfTupleOrUnit){return row.id===elem.id&&typePassesFilter(elem.typeFilter,row.ty)}else{return unifyFunctionTypes([row],[elem],whereClause,mgens,()=>true,unboxingDepth,)}};const checkTypeMgensForConflict=mgens=>{if(!mgens){return true}const fnTypes=new Set();for(const[_qid,fid]of mgens){if(fnTypes.has(fid)){return false}fnTypes.add(fid)}return true};function checkPath(contains,ty){if(contains.length===0){return 0}const maxPathEditDistance=Math.floor(contains.reduce((acc,next)=>acc+next.length,0)/3,);let ret_dist=maxPathEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;pathiter:for(let i=length-clength;i>=0;i-=1){let dist_total=0;for(let x=0;xmaxPathEditDistance){continue pathiter}dist_total+=dist}}ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}return ret_dist>maxPathEditDistance?null:ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,descShard:item.descShard,descIndex:item.descIndex,exactPath:item.exactPath,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,bitIndex:item.bitIndex,implDisambiguator:item.implDisambiguator,}}const handleAliases=async(ret,query,filterCrates,currentCrate)=>{const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(this.ALIASES.has(filterCrates)&&this.ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=this.ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(this.searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of this.ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(this.searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{return this.searchIndexEmptyDesc.get(alias.crate).contains(alias.bitIndex)?"":this.searchState.loadDesc(alias)};const[crateDescs,descs]=await Promise.all([Promise.all(crateAliases.map(fetchDesc)),Promise.all(aliases.map(fetchDesc)),]);const pushFunc=alias=>{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach((alias,i)=>{alias.desc=descs[i]});aliases.forEach(pushFunc);crateAliases.forEach((alias,i)=>{alias.desc=crateDescs[i]});crateAliases.forEach(pushFunc)};function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){if(dist<=maxEditDistance||index!==-1){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}const tfpDist=compareTypeFingerprints(row.id,parsedQuery.typeFingerprint,);if(tfpDist===null){return}if(results.size>=MAX_RESULTS&&tfpDist>results.max_dist){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems,row.type.where_clause,null,mgens=>{return unifyFunctionTypes(row.type.output,parsedQuery.returned,row.type.where_clause,mgens,checkTypeMgensForConflict,0,)},0,)){return}results.max_dist=Math.max(results.max_dist||0,tfpDist);addIntoResults(results,row.id,pos,0,tfpDist,0,Number.MAX_VALUE)}const compareTypeFingerprints=(fullId,queryFingerprint)=>{const fh0=this.functionTypeFingerprint[fullId*4];const fh1=this.functionTypeFingerprint[(fullId*4)+1];const fh2=this.functionTypeFingerprint[(fullId*4)+2];const[qh0,qh1,qh2]=queryFingerprint;const[in0,in1,in2]=[fh0&qh0,fh1&qh1,fh2&qh2];if((in0 ^ qh0)||(in1 ^ qh1)||(in2 ^ qh2)){return null}return this.functionTypeFingerprint[(fullId*4)+3]};const innerRunQuery=()=>{const queryLen=parsedQuery.elems.reduce((acc,next)=>acc+next.pathLast.length,0)+parsedQuery.returned.reduce((acc,next)=>acc+next.pathLast.length,0);const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();const convertNameToId=(elem,isAssocType)=>{const loweredName=elem.pathLast.toLowerCase();if(this.typeNameIdMap.has(loweredName)&&(isAssocType||!this.typeNameIdMap.get(loweredName).assocOnly)){elem.id=this.typeNameIdMap.get(loweredName).id}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,{id,assocOnly}]of this.typeNameIdMap){const dist=Math.min(editDistance(name,loweredName,maxEditDistance),editDistance(name,elem.normalizedPathLast,maxEditDistance),);if(dist<=matchDist&&dist<=maxEditDistance&&(isAssocType||!assocOnly)){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0&&elem.bindings.size===0)||elem.typeFilter===TY_GENERIC){if(genericSymbols.has(elem.normalizedPathLast)){elem.id=genericSymbols.get(elem.normalizedPathLast)}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.normalizedPathLast,elem.id)}if(elem.typeFilter===-1&&elem.normalizedPathLast.length>=3){const maxPartDistance=Math.floor(elem.normalizedPathLast.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of this.typeNameIdMap.keys()){const dist=editDistance(name,elem.normalizedPathLast,maxPartDistance,);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}elem.bindings=new Map(Array.from(elem.bindings.entries()).map(entry=>{const[name,constraints]=entry;if(!this.typeNameIdMap.has(name)){parsedQuery.error=["Type parameter ",name," does not exist",];return[null,[]]}for(const elem2 of constraints){convertNameToId(elem2)}return[this.typeNameIdMap.get(name).id,constraints]}),)};for(const elem of parsedQuery.elems){convertNameToId(elem);this.buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint)}for(const elem of parsedQuery.returned){convertNameToId(elem);this.buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint)}if(parsedQuery.foundElems===1&&!parsedQuery.hasReturnArrow){const elem=parsedQuery.elems[0];const handleNameSearch=id=>{const row=this.searchIndex[id];if(!typePassesFilter(elem.typeFilter,row.ty)||(filterCrates!==null&&row.crate!==filterCrates)){return}let pathDist=0;if(elem.fullPath.length>1){pathDist=checkPath(elem.pathWithoutLast,row);if(pathDist===null){return}}if(parsedQuery.literalSearch){if(row.word===elem.pathLast){addIntoResults(results_others,row.id,id,0,0,pathDist)}}else{addIntoResults(results_others,row.id,id,row.normalizedName.indexOf(elem.normalizedPathLast),editDistance(row.normalizedName,elem.normalizedPathLast,maxEditDistance,),pathDist,maxEditDistance,)}};if(elem.normalizedPathLast!==""){const last=elem.normalizedPathLast;for(const id of this.nameTrie.search(last,this.tailTable)){handleNameSearch(id)}}const length=this.searchIndex.length;for(let i=0,nSearchIndex=length;i0){const sortQ=(a,b)=>{const ag=a.generics.length===0&&a.bindings.size===0;const bg=b.generics.length===0&&b.bindings.size===0;if(ag!==bg){return ag-bg}const ai=a.id>0;const bi=b.id>0;return ai-bi};parsedQuery.elems.sort(sortQ);parsedQuery.returned.sort(sortQ);for(let i=0,nSearchIndex=this.searchIndex.length;i{const descs=await Promise.all(list.map(result=>{return this.searchIndexEmptyDesc.get(result.crate).contains(result.bitIndex)?"":this.searchState.loadDesc(result)}));for(const[i,result]of list.entries()){result.desc=descs[i]}}));if(parsedQuery.error!==null&&ret.others.length!==0){ret.query.error=null}return ret}}let rawSearchIndex;let docSearch;const longItemTypes=["keyword","primitive type","module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","assoc type","constant","assoc const","union","foreign type","existential type","attribute macro","derive macro","trait alias",];let currentResults;function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&window.searchIndex.has(elem.value)){return elem.value}return null}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}async function addTab(array,query,display){const extraClass=display?" active":"";const output=document.createElement(array.length===0&&query.error===null?"div":"ul",);if(array.length>0){output.className="search-results "+extraClass;const lis=Promise.all(array.map(async item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("span");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
\ +${item.alias} - see \ +
`}resultName.insertAdjacentHTML("beforeend",`
${alias}\ +${item.displayPath}${name}\ +
`);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);if(item.displayTypeSignature){const{type,mappedNames,whereClause}=await item.displayTypeSignature;const displayType=document.createElement("div");type.forEach((value,index)=>{if(index%2!==0){const highlight=document.createElement("strong");highlight.appendChild(document.createTextNode(value));displayType.appendChild(highlight)}else{displayType.appendChild(document.createTextNode(value))}});if(mappedNames.size>0||whereClause.size>0){let addWhereLineFn=()=>{const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode("where"));displayType.appendChild(line);addWhereLineFn=()=>{}};for(const[qname,name]of mappedNames){if(name===qname){continue}addWhereLineFn();const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode(` ${qname} matches `));const lineStrong=document.createElement("strong");lineStrong.appendChild(document.createTextNode(name));line.appendChild(lineStrong);displayType.appendChild(line)}for(const[name,innerType]of whereClause){if(innerType.length<=1){continue}addWhereLineFn();const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode(` ${name}: `));innerType.forEach((value,index)=>{if(index%2!==0){const highlight=document.createElement("strong");highlight.appendChild(document.createTextNode(value));line.appendChild(highlight)}else{line.appendChild(document.createTextNode(value))}});displayType.appendChild(line)}}displayType.className="type-signature";link.appendChild(displayType)}link.appendChild(description);return link}));lis.then(lis=>{for(const li of lis){output.appendChild(li)}})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return output}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}async function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=DocSearch.parseQuery(searchState.input.value)}currentResults=results.query.userQuery;let currentTab=searchState.currentTab;if((currentTab===0&&results.others.length===0)||(currentTab===1&&results.in_args.length===0)||(currentTab===2&&results.returned.length===0)){if(results.others.length!==0){currentTab=0}else if(results.in_args.length){currentTab=1}else if(results.returned.length){currentTab=2}}let crates="";if(rawSearchIndex.size>1){crates="
in 
"+"
"}let output=`
\ +

Results

${crates}
`;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

Query parser error: "${error.join("")}".

`;output+="
"+makeTabHeader(0,"In Names",results.others.length)+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",results.others.length)+makeTabHeader(1,"In Parameters",results.in_args.length)+makeTabHeader(2,"In Return Types",results.returned.length)+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,results.others.length)+"
";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

`}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

"+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

`}const[ret_others,ret_in_args,ret_returned]=await Promise.all([addTab(results.others,results.query,currentTab===0),addTab(results.in_args,results.query,currentTab===1),addTab(results.returned,results.query,currentTab===2),]);const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others);resultsElem.appendChild(ret_in_args);resultsElem.appendChild(ret_returned);search.innerHTML=output;if(searchState.rustdocToolbar){search.querySelector(".main-heading").appendChild(searchState.rustdocToolbar)}const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}async function search(forced){const query=DocSearch.parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="\""+query.userQuery+"\" Search - Rust";updateSearchHistory(buildUrl(query.userQuery,filterCrates));await showResults(await docSearch.execQuery(query,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;e.preventDefault();search()}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(true)}function initSearch(searchIndx){rawSearchIndex=searchIndx;if(typeof window!=="undefined"){docSearch=new DocSearch(rawSearchIndex,ROOT_PATH,searchState);registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}else if(typeof exports!=="undefined"){docSearch=new DocSearch(rawSearchIndex,ROOT_PATH,searchState);exports.docSearch=docSearch;exports.parseQuery=DocSearch.parseQuery}}if(typeof exports!=="undefined"){exports.initSearch=initSearch}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch(new Map())}class ParametricDescription{constructor(w,n,minErrors){this.w=w;this.n=n;this.minErrors=minErrors}isAccept(absState){const state=Math.floor(absState/(this.w+1));const offset=absState%(this.w+1);return this.w-offset+this.minErrors[state]<=this.n}getPosition(absState){return absState%(this.w+1)}getVector(name,charCode,pos,end){let vector=0;for(let i=pos;i>5;const bitStart=bitLoc&31;if(bitStart+bitsPerValue<=32){return((data[dataLoc]>>bitStart)&this.MASKS[bitsPerValue-1])}else{const part=32-bitStart;return ~~(((data[dataLoc]>>bitStart)&this.MASKS[part-1])+((data[1+dataLoc]&this.MASKS[bitsPerValue-part-1])<{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost,);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1,)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let searchIndexDeprecated;let searchIndexEmptyDesc;let functionTypeFingerprint;let currentResults;const typeNameIdMap=new Map();const ALIASES=new Map();const typeNameIdOfArray=buildTypeMapIndex("array");const typeNameIdOfSlice=buildTypeMapIndex("slice");const typeNameIdOfArrayOrSlice=buildTypeMapIndex("[]");const typeNameIdOfTuple=buildTypeMapIndex("tuple");const typeNameIdOfUnit=buildTypeMapIndex("unit");const typeNameIdOfTupleOrUnit=buildTypeMapIndex("()");const typeNameIdOfFn=buildTypeMapIndex("fn");const typeNameIdOfFnMut=buildTypeMapIndex("fnmut");const typeNameIdOfFnOnce=buildTypeMapIndex("fnonce");const typeNameIdOfHof=buildTypeMapIndex("->");function buildTypeMapIndex(name,isAssocType){if(name===""||name===null){return null}if(typeNameIdMap.has(name)){const obj=typeNameIdMap.get(name);obj.assocOnly=isAssocType&&obj.assocOnly;return obj.id}else{const id=typeNameIdMap.size;typeNameIdMap.set(name,{id,assocOnly:isAssocType});return id}}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return"=,>-])".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","||c==="="}function isPathSeparator(c){return c===":"||c===" "}function prevIs(parserState,lookingFor){let pos=parserState.pos;while(pos>0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(c!==" "){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function skipWhitespace(parserState){while(parserState.pos0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}const bindingName=parserState.isInBinding;parserState.isInBinding=null;return makePrimitiveElement("never",{bindingName})}const quadcolon=/::\s*::/.exec(path);if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(path.endsWith("::")){throw["Paths cannot end with ","::"]}else if(quadcolon!==null){throw["Unexpected ",quadcolon[0]]}const pathSegments=path.split(/(?:::\s*)|(?:\s+(?:::\s*)?)/);if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}const bindingName=parserState.isInBinding;parserState.isInBinding=null;const bindings=new Map();const pathLast=pathSegments[pathSegments.length-1];return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast,normalizedPathLast:pathLast.replace(/_/g,""),generics:generics.filter(gen=>{if(gen.bindingName!==null){if(gen.name!==null){gen.bindingName.generics.unshift(gen)}bindings.set(gen.bindingName.name,gen.bindingName.generics);return false}return true}),bindings,typeFilter,bindingName,}}function getIdentEndPosition(parserState){const start=parserState.pos;let end=parserState.pos;let foundExclamation=-1;while(parserState.pos0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]]}else{throw["Unexpected ",c]}}parserState.pos+=1;end=parserState.pos}if(foundExclamation!==-1&&foundExclamation!==start&&isIdentCharacter(parserState.userQuery[foundExclamation-1])){if(parserState.typeFilter===null){parserState.typeFilter="macro"}else if(parserState.typeFilter!=="macro"){throw["Invalid search type: macro ","!"," and ",parserState.typeFilter," both specified",]}end=foundExclamation}return end}function getFilteredNextElem(query,parserState,elems,isInGenerics){const start=parserState.pos;if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){throw["Expected type filter before ",":"]}getNextElem(query,parserState,elems,isInGenerics);if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}if(elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;getNextElem(query,parserState,elems,isInGenerics)}}function getNextElem(query,parserState,elems,isInGenerics){const generics=[];skipWhitespace(parserState);let start=parserState.pos;let end;if("[(".indexOf(parserState.userQuery[parserState.pos])!==-1){let endChar=")";let name="()";let friendlyName="tuple";if(parserState.userQuery[parserState.pos]==="["){endChar="]";name="[]";friendlyName="slice"}parserState.pos+=1;const{foundSeparator}=getItemsBefore(query,parserState,generics,endChar);const typeFilter=parserState.typeFilter;const bindingName=parserState.isInBinding;parserState.typeFilter=null;parserState.isInBinding=null;for(const gen of generics){if(gen.bindingName!==null){throw["Type parameter ","=",` cannot be within ${friendlyName} `,name]}}if(name==="()"&&!foundSeparator&&generics.length===1&&typeFilter===null){elems.push(generics[0])}else if(name==="()"&&generics.length===1&&generics[0].name==="->"){generics[0].typeFilter=typeFilter;elems.push(generics[0])}else{if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive ",name," and ",typeFilter," both specified",]}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}elems.push(makePrimitiveElement(name,{bindingName,generics}))}}else{const isStringElem=parserState.userQuery[start]==="\"";if(isStringElem){start+=1;getStringElem(query,parserState,isInGenerics);end=parserState.pos-1}else{end=getIdentEndPosition(parserState)}if(parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}else if(parserState.pos=end){throw["Found generics without a path"]}if(parserState.isInBinding){throw["Unexpected ","("," after ","="]}parserState.pos+=1;const typeFilter=parserState.typeFilter;parserState.typeFilter=null;getItemsBefore(query,parserState,generics,")");skipWhitespace(parserState);if(isReturnArrow(parserState)){parserState.pos+=2;skipWhitespace(parserState);getFilteredNextElem(query,parserState,generics,isInGenerics);generics[generics.length-1].bindingName=makePrimitiveElement("output")}else{generics.push(makePrimitiveElement(null,{bindingName:makePrimitiveElement("output"),typeFilter:null,}))}parserState.typeFilter=typeFilter}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}if(parserState.userQuery[parserState.pos]==="="){if(parserState.isInBinding){throw["Cannot write ","="," twice in a binding"]}if(!isInGenerics){throw["Type parameter ","="," must be within generics list"]}const name=parserState.userQuery.slice(start,end).trim();if(name==="!"){throw["Type parameter ","="," key cannot be ","!"," never type"]}if(name.includes("!")){throw["Type parameter ","="," key cannot be ","!"," macro"]}if(name.includes("::")){throw["Type parameter ","="," key cannot contain ","::"," path"]}if(name.includes(":")){throw["Type parameter ","="," key cannot contain ",":"," type"]}parserState.isInBinding={name,generics}}else{elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics,),)}}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let foundSeparator=false;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;const oldIsInBinding=parserState.isInBinding;parserState.isInBinding=null;let hofParameters=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===")"){extra="("}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"," after ","="]}hofParameters=[...elems];elems.length=0;parserState.pos+=2;foundStopChar=true;foundSeparator=false;continue}else if(c===" "){parserState.pos+=1;continue}else if(isSeparatorCharacter(c)){parserState.pos+=1;foundStopChar=true;foundSeparator=true;continue}else if(c===":"&&isPathStart(parserState)){throw["Unexpected ","::",": paths cannot start with ","::"]}else if(isEndCharacter(c)){throw["Unexpected ",c," after ",extra]}if(!foundStopChar){let extra=[];if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",",",", ","=",", or ",endChar,...extra,", found ",c,]}throw["Expected ",","," or ","=",...extra,", found ",c,]}const posBefore=parserState.pos;getFilteredNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;if(hofParameters){foundSeparator=false;if([...elems,...hofParameters].some(x=>x.bindingName)||parserState.isInBinding){throw["Unexpected ","="," within ","->"]}const hofElem=makePrimitiveElement("->",{generics:hofParameters,bindings:new Map([["output",[...elems]]]),typeFilter:null,});elems.length=0;elems[0]=hofElem}parserState.typeFilter=oldTypeFilter;parserState.isInBinding=oldIsInBinding;return{foundSeparator}}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();for(const c in query){if(!isIdentCharacter(query[c])){throw["Unexpected ",query[c]," in type filter (before ",":",")",]}}}function parseInput(query,parserState){let foundStopChar=true;while(parserState.pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}else if(parserState.pos>0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]]}throw["Unexpected ",c]}else if(c===" "){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;getFilteredNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,typeFingerprint:new Uint32Array(4),}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&rawSearchIndex.has(elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}for(const constraints of elem.bindings.values()){for(const constraint of constraints){convertTypeFilterOnElem(constraint)}}}userQuery=userQuery.trim().replace(/\r|\n|\t/g," ");const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,isInBinding:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}async function execQuery(parsedQuery,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=res[2]+"|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}if(obj.ty===TY_IMPORT&&duplicates.has(res[2])){continue}if(duplicates.has(res[2]+"|"+TY_IMPORT)){continue}duplicates.add(obj.fullPath);duplicates.add(res[2]);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}async function sortResults(results,isType,preferredCrate){const userQuery=parsedQuery.userQuery;const result_list=[];for(const result of results.values()){result.item=searchIndex[result.id];result.word=searchIndex[result.id].word;result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=searchIndexDeprecated.get(aaa.item.crate).contains(aaa.item.bitIndex);b=searchIndexDeprecated.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=searchIndexEmptyDesc.get(aaa.item.crate).contains(aaa.item.bitIndex);b=searchIndexEmptyDesc.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});return transformResults(result_list)}function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return false}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return!solutionCb||solutionCb(mgens)}if(!fnTypesIn||fnTypesIn.length===0){return false}const ql=queryElems.length;const fl=fnTypesIn.length;if(ql===1&&queryElems[0].generics.length===0&&queryElems[0].bindings.size===0){const queryElem=queryElems[0];for(const fnType of fnTypesIn){if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}if(fnType.id<0&&queryElem.id<0){if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){continue}const mgensScratch=new Map(mgens);mgensScratch.set(fnType.id,queryElem.id);if(!solutionCb||solutionCb(mgensScratch)){return true}}else if(!solutionCb||solutionCb(mgens?new Map(mgens):null)){return true}}for(const fnType of fnTypesIn){if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}if(fnType.id<0){if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){continue}const mgensScratch=new Map(mgens);mgensScratch.set(fnType.id,0);if(unifyFunctionTypes(whereClause[(-fnType.id)-1],queryElems,whereClause,mgensScratch,solutionCb,unboxingDepth+1,)){return true}}else if(unifyFunctionTypes([...fnType.generics,...Array.from(fnType.bindings.values()).flat()],queryElems,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth+1,)){return true}}return false}const fnTypes=fnTypesIn.slice();const flast=fl-1;const qlast=ql-1;const queryElem=queryElems[qlast];let queryElemsTmp=null;for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}let mgensScratch;if(fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(fnType.id)&&mgensScratch.get(fnType.id)!==queryElem.id){continue}mgensScratch.set(fnType.id,queryElem.id)}else{mgensScratch=mgens}fnTypes[i]=fnTypes[flast];fnTypes.length=flast;if(!queryElemsTmp){queryElemsTmp=queryElems.slice(0,qlast)}const passesUnification=unifyFunctionTypes(fnTypes,queryElemsTmp,whereClause,mgensScratch,mgensScratch=>{if(fnType.generics.length===0&&queryElem.generics.length===0&&fnType.bindings.size===0&&queryElem.bindings.size===0){return!solutionCb||solutionCb(mgensScratch)}const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){const passesUnification=unifyFunctionTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,);if(passesUnification){return true}}return false},unboxingDepth,);if(passesUnification){return true}fnTypes[flast]=fnTypes[i];fnTypes[i]=fnType;fnTypes.length=fl}for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}let mgensScratch;if(fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(fnType.id)&&mgensScratch.get(fnType.id)!==0){continue}mgensScratch.set(fnType.id,0)}else{mgensScratch=mgens}const generics=fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;const bindings=fnType.bindings?Array.from(fnType.bindings.values()).flat():[];const passesUnification=unifyFunctionTypes(fnTypes.toSpliced(i,1,...generics,...bindings),queryElems,whereClause,mgensScratch,solutionCb,unboxingDepth+1,);if(passesUnification){return true}}return false}function unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgensIn){if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id<0&&queryElem.id<0){if(mgensIn){if(mgensIn.has(fnType.id)&&mgensIn.get(fnType.id)!==queryElem.id){return false}for(const[fid,qid]of mgensIn.entries()){if(fnType.id!==fid&&queryElem.id===qid){return false}if(fnType.id===fid&&queryElem.id!==qid){return false}}}return true}else{if(queryElem.id===typeNameIdOfArrayOrSlice&&(fnType.id===typeNameIdOfSlice||fnType.id===typeNameIdOfArray)){}else if(queryElem.id===typeNameIdOfTupleOrUnit&&(fnType.id===typeNameIdOfTuple||fnType.id===typeNameIdOfUnit)){}else if(queryElem.id===typeNameIdOfHof&&(fnType.id===typeNameIdOfFn||fnType.id===typeNameIdOfFnMut||fnType.id===typeNameIdOfFnOnce)){}else if(fnType.id!==queryElem.id||queryElem.id===null){return false}if((fnType.generics.length+fnType.bindings.size)===0&&queryElem.generics.length!==0){return false}if(fnType.bindings.size0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i0){let mgensSolutionSet=[mgensIn];for(const[name,constraints]of queryElem.bindings.entries()){if(mgensSolutionSet.length===0){return false}if(!fnType.bindings.has(name)){return false}const fnTypeBindings=fnType.bindings.get(name);mgensSolutionSet=mgensSolutionSet.flatMap(mgens=>{const newSolutions=[];unifyFunctionTypes(fnTypeBindings,constraints,whereClause,mgens,newMgens=>{newSolutions.push(newMgens);return false},unboxingDepth,);return newSolutions})}if(mgensSolutionSet.length===0){return false}const binds=Array.from(fnType.bindings.entries()).flatMap(entry=>{const[name,constraints]=entry;if(queryElem.bindings.has(name)){return[]}else{return constraints}});if(simplifiedGenerics.length>0){simplifiedGenerics=[...simplifiedGenerics,...binds]}else{simplifiedGenerics=binds}return{simplifiedGenerics,mgens:mgensSolutionSet}}return{simplifiedGenerics,mgens:[mgensIn]}}function unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return false}if(fnType.id<0&&queryElem.id>=0){if(!whereClause){return false}if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){return false}const mgensTmp=new Map(mgens);mgensTmp.set(fnType.id,null);return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause,mgensTmp,unboxingDepth,)}else if(fnType.generics.length>0||fnType.bindings.size>0){const simplifiedGenerics=[...fnType.generics,...Array.from(fnType.bindings.values()).flat(),];return checkIfInList(simplifiedGenerics,queryElem,whereClause,mgens,unboxingDepth,)}return false}function checkIfInList(list,elem,whereClause,mgens,unboxingDepth){for(const entry of list){if(checkType(entry,elem,whereClause,mgens,unboxingDepth)){return true}}return false}function checkType(row,elem,whereClause,mgens,unboxingDepth){if(unboxingDepth>=UNBOXING_LIMIT){return false}if(row.bindings.size===0&&elem.bindings.size===0){if(elem.id<0&&mgens===null){return row.id<0||checkIfInList(row.generics,elem,whereClause,mgens,unboxingDepth+1,)}if(row.id>0&&elem.id>0&&elem.pathWithoutLast.length===0&&typePassesFilter(elem.typeFilter,row.ty)&&elem.generics.length===0&&elem.id!==typeNameIdOfArrayOrSlice&&elem.id!==typeNameIdOfTupleOrUnit&&elem.id!==typeNameIdOfHof){return row.id===elem.id||checkIfInList(row.generics,elem,whereClause,mgens,unboxingDepth,)}}return unifyFunctionTypes([row],[elem],whereClause,mgens,null,unboxingDepth)}function checkPath(contains,ty){if(contains.length===0){return 0}const maxPathEditDistance=Math.floor(contains.reduce((acc,next)=>acc+next.length,0)/3,);let ret_dist=maxPathEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;pathiter:for(let i=length-clength;i>=0;i-=1){let dist_total=0;for(let x=0;xmaxPathEditDistance){continue pathiter}dist_total+=dist}}ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}return ret_dist>maxPathEditDistance?null:ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,descShard:item.descShard,descIndex:item.descIndex,exactPath:item.exactPath,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,bitIndex:item.bitIndex,implDisambiguator:item.implDisambiguator,}}function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach(pushFunc);crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){if(dist<=maxEditDistance||index!==-1){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance,){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let path_dist=0;const fullId=row.id;const tfpDist=compareTypeFingerprints(fullId,parsedQuery.typeFingerprint,);if(tfpDist!==null){const in_args=row.type&&row.type.inputs&&checkIfInList(row.type.inputs,elem,row.type.where_clause,null,0);const returned=row.type&&row.type.output&&checkIfInList(row.type.output,elem,row.type.where_clause,null,0);if(in_args){results_in_args.max_dist=Math.max(results_in_args.max_dist||0,tfpDist);const maxDist=results_in_args.sizenormalizedIndex&&normalizedIndex!==-1)){index=normalizedIndex}if(elem.fullPath.length>1){path_dist=checkPath(elem.pathWithoutLast,row);if(path_dist===null){return}}if(parsedQuery.literalSearch){if(row.word===elem.pathLast){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}const dist=editDistance(row.normalizedName,elem.normalizedPathLast,maxEditDistance);if(index===-1&&dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}const tfpDist=compareTypeFingerprints(row.id,parsedQuery.typeFingerprint,);if(tfpDist===null){return}if(results.size>=MAX_RESULTS&&tfpDist>results.max_dist){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems,row.type.where_clause,null,mgens=>{return unifyFunctionTypes(row.type.output,parsedQuery.returned,row.type.where_clause,mgens,null,0,)},0,)){return}results.max_dist=Math.max(results.max_dist||0,tfpDist);addIntoResults(results,row.id,pos,0,tfpDist,0,Number.MAX_VALUE)}function innerRunQuery(){const queryLen=parsedQuery.elems.reduce((acc,next)=>acc+next.pathLast.length,0)+parsedQuery.returned.reduce((acc,next)=>acc+next.pathLast.length,0);const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();function convertNameToId(elem,isAssocType){if(typeNameIdMap.has(elem.normalizedPathLast)&&(isAssocType||!typeNameIdMap.get(elem.normalizedPathLast).assocOnly)){elem.id=typeNameIdMap.get(elem.normalizedPathLast).id}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,{id,assocOnly}]of typeNameIdMap){const dist=editDistance(name,elem.normalizedPathLast,maxEditDistance);if(dist<=matchDist&&dist<=maxEditDistance&&(isAssocType||!assocOnly)){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0&&elem.bindings.size===0)||elem.typeFilter===TY_GENERIC){if(genericSymbols.has(elem.name)){elem.id=genericSymbols.get(elem.name)}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.name,elem.id)}if(elem.typeFilter===-1&&elem.name.length>=3){const maxPartDistance=Math.floor(elem.name.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of typeNameIdMap.keys()){const dist=editDistance(name,elem.name,maxPartDistance);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}elem.bindings=new Map(Array.from(elem.bindings.entries()).map(entry=>{const[name,constraints]=entry;if(!typeNameIdMap.has(name)){parsedQuery.error=["Type parameter ",name," does not exist",];return[null,[]]}for(const elem2 of constraints){convertNameToId(elem2)}return[typeNameIdMap.get(name).id,constraints]}),)}const fps=new Set();for(const elem of parsedQuery.elems){convertNameToId(elem);buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint,fps)}for(const elem of parsedQuery.returned){convertNameToId(elem);buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint,fps)}if(parsedQuery.foundElems===1&&parsedQuery.returned.length===0){if(parsedQuery.elems.length===1){const elem=parsedQuery.elems[0];for(let i=0,nSearchIndex=searchIndex.length;i0){const sortQ=(a,b)=>{const ag=a.generics.length===0&&a.bindings.size===0;const bg=b.generics.length===0&&b.bindings.size===0;if(ag!==bg){return ag-bg}const ai=a.id>0;const bi=b.id>0;return ai-bi};parsedQuery.elems.sort(sortQ);parsedQuery.returned.sort(sortQ);for(let i=0,nSearchIndex=searchIndex.length;i{const descs=await Promise.all(list.map(result=>{return searchIndexEmptyDesc.get(result.crate).contains(result.bitIndex)?"":searchState.loadDesc(result)}));for(const[i,result]of list.entries()){result.desc=descs[i]}}));if(parsedQuery.error!==null&&ret.others.length!==0){ret.query.error=null}return ret}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}function buildHrefAndPath(item){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;let exactPath=item.exactPath;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor=type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;exactPath=`${myparent.exactPath}::${myparent.name}`;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}if(item.implDisambiguator!==null){anchor=item.implDisambiguator+"/"+anchor}href=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html#"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href,`${exactPath}::${name}`]}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}async function addTab(array,query,display){const extraClass=display?" active":"";const output=document.createElement("div");if(array.length>0){output.className="search-results "+extraClass;for(const item of array){const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
\ -${item.alias} - see \ -
`}resultName.insertAdjacentHTML("beforeend",`
${alias}\ -${item.displayPath}${name}\ -
`);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)}}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return[output,array.length]}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}async function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const[ret_others,ret_in_args,ret_returned]=await Promise.all([addTab(results.others,results.query,true),addTab(results.in_args,results.query,false),addTab(results.returned,results.query,false),]);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";if(rawSearchIndex.size>1){crates=" in 
"}let output=`

Results${crates}

`;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

Query parser error: "${error.join("")}".

`;output+="
"+makeTabHeader(0,"In Names",ret_others[1])+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

`}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

"+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

`}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}async function search(forced){const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";updateSearchHistory(buildUrl(query.original,filterCrates));await showResults(await execQuery(query,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){return types.length>0?types.map(type=>buildItemSearchType(type,lowercasePaths)):EMPTY_GENERICS_ARRAY}const EMPTY_BINDINGS_MAP=new Map();const EMPTY_GENERICS_ARRAY=[];let TYPES_POOL=new Map();function buildItemSearchType(type,lowercasePaths,isAssocType){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;const BINDINGS_DATA=2;let pathIndex,generics,bindings;if(typeof type==="number"){pathIndex=type;generics=EMPTY_GENERICS_ARRAY;bindings=EMPTY_BINDINGS_MAP}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths,);if(type.length>BINDINGS_DATA&&type[BINDINGS_DATA].length>0){bindings=new Map(type[BINDINGS_DATA].map(binding=>{const[assocType,constraints]=binding;return[buildItemSearchType(assocType,lowercasePaths,true).id,buildItemSearchTypeAll(constraints,lowercasePaths),]}))}else{bindings=EMPTY_BINDINGS_MAP}}let result;if(pathIndex<0){result={id:pathIndex,ty:TY_GENERIC,path:null,exactPath:null,generics,bindings,}}else if(pathIndex===0){result={id:null,ty:null,path:null,exactPath:null,generics,bindings,}}else{const item=lowercasePaths[pathIndex-1];result={id:buildTypeMapIndex(item.name,isAssocType),ty:item.ty,path:item.path,exactPath:item.exactPath,generics,bindings,}}const cr=TYPES_POOL.get(result.id);if(cr){if(cr.generics.length===result.generics.length&&cr.generics!==result.generics&&cr.generics.every((x,i)=>result.generics[i]===x)){result.generics=cr.generics}if(cr.bindings.size===result.bindings.size&&cr.bindings!==result.bindings){let ok=true;for(const[k,v]of cr.bindings.entries()){const v2=result.bindings.get(v);if(!v2){ok=false;break}if(v!==v2&&v.length===v2.length&&v.every((x,i)=>v2[i]===x)){result.bindings.set(k,v)}else if(v!==v2){ok=false;break}}if(ok){result.bindings=cr.bindings}}if(cr.ty===result.ty&&cr.path===result.path&&cr.bindings===result.bindings&&cr.generics===result.generics&&cr.ty===result.ty){return cr}}TYPES_POOL.set(result.id,result);return result}function buildFunctionSearchTypeCallback(lowercasePaths){return functionSearchType=>{if(functionSearchType===0){return null}const INPUTS_DATA=0;const OUTPUT_DATA=1;let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[buildItemSearchType(functionSearchType[INPUTS_DATA],lowercasePaths)]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths,)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[buildItemSearchType(functionSearchType[OUTPUT_DATA],lowercasePaths)]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths,)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;i{k=(~~k+0x7ed55d16)+(k<<12);k=(k ^ 0xc761c23c)^(k>>>19);k=(~~k+0x165667b1)+(k<<5);k=(~~k+0xd3a2646c)^(k<<9);k=(~~k+0xfd7046c5)+(k<<3);return(k ^ 0xb55a4f09)^(k>>>16)};const hashint2=k=>{k=~k+(k<<15);k ^=k>>>12;k+=k<<2;k ^=k>>>4;k=Math.imul(k,2057);return k ^(k>>16)};if(input!==null){const h0a=hashint1(input);const h0b=hashint2(input);const h1a=~~(h0a+Math.imul(h0b,2));const h1b=~~(h0a+Math.imul(h0b,3));const h2a=~~(h0a+Math.imul(h0b,4));const h2b=~~(h0a+Math.imul(h0b,5));output[0]|=(1<<(h0a%32))|(1<<(h1b%32));output[1]|=(1<<(h1a%32))|(1<<(h2b%32));output[2]|=(1<<(h2a%32))|(1<<(h0b%32));fps.add(input)}for(const g of type.generics){buildFunctionTypeFingerprint(g,output,fps)}const fb={id:null,ty:0,generics:EMPTY_GENERICS_ARRAY,bindings:EMPTY_BINDINGS_MAP,};for(const[k,v]of type.bindings.entries()){fb.id=k;fb.generics=v;buildFunctionTypeFingerprint(fb,output,fps)}output[3]=fps.size}function compareTypeFingerprints(fullId,queryFingerprint){const fh0=functionTypeFingerprint[fullId*4];const fh1=functionTypeFingerprint[(fullId*4)+1];const fh2=functionTypeFingerprint[(fullId*4)+2];const[qh0,qh1,qh2]=queryFingerprint;const[in0,in1,in2]=[fh0&qh0,fh1&qh1,fh2&qh2];if((in0 ^ qh0)||(in1 ^ qh1)||(in2 ^ qh2)){return null}return functionTypeFingerprint[(fullId*4)+3]}class VlqHexDecoder{constructor(string,cons){this.string=string;this.cons=cons;this.offset=0;this.backrefQueue=[]}decodeList(){const cb="}".charCodeAt(0);let c=this.string.charCodeAt(this.offset);const ret=[];while(c!==cb){ret.push(this.decode());c=this.string.charCodeAt(this.offset)}this.offset+=1;return ret}decode(){const[ob,la]=["{","`"].map(c=>c.charCodeAt(0));let n=0;let c=this.string.charCodeAt(this.offset);if(c===ob){this.offset+=1;return this.decodeList()}while(c>1];this.offset+=1;return sign?-value:value}next(){const c=this.string.charCodeAt(this.offset);const[zero,ua,la]=["0","@","`"].map(c=>c.charCodeAt(0));if(c>=zero&&c16){this.backrefQueue.pop()}return result}}class RoaringBitmap{constructor(str){const strdecoded=atob(str);const u8array=new Uint8Array(strdecoded.length);for(let j=0;j=4){offsets=[];for(let j=0;j>3]&(1<<(j&0x7))){const runcount=(u8array[i]|(u8array[i+1]<<8));i+=2;this.containers.push(new RoaringBitmapRun(runcount,u8array.slice(i,i+(runcount*4)),));i+=runcount*4}else if(this.cardinalities[j]>=4096){this.containers.push(new RoaringBitmapBits(u8array.slice(i,i+8192)));i+=8192}else{const end=this.cardinalities[j]*2;this.containers.push(new RoaringBitmapArray(this.cardinalities[j],u8array.slice(i,i+end),));i+=end}}}contains(keyvalue){const key=keyvalue>>16;const value=keyvalue&0xFFFF;for(let i=0;i=start&&value<=(start+lenm1)){return true}}return false}}class RoaringBitmapArray{constructor(cardinality,array){this.cardinality=cardinality;this.array=array}contains(value){const l=this.cardinality*2;for(let i=0;i>3]&(1<<(value&7)))}}function buildIndex(rawSearchIndex){searchIndex=[];searchIndexDeprecated=new Map();searchIndexEmptyDesc=new Map();const charA="A".charCodeAt(0);let currentIndex=0;let id=0;for(const crate of rawSearchIndex.values()){id+=crate.t.length+1}functionTypeFingerprint=new Uint32Array((id+1)*4);id=0;for(const[crate,crateCorpus]of rawSearchIndex){const itemDescShardDecoder=new VlqHexDecoder(crateCorpus.D,noop=>noop);let descShard={crate,shard:0,start:0,len:itemDescShardDecoder.next(),promise:null,resolve:null,};const descShardList=[descShard];searchIndexDeprecated.set(crate,new RoaringBitmap(crateCorpus.c));searchIndexEmptyDesc.set(crate,new RoaringBitmap(crateCorpus.e));let descIndex=0;const crateRow={crate,ty:3,name:crate,path:"",descShard,descIndex,exactPath:"",desc:crateCorpus.doc,parent:undefined,type:null,id,word:crate,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),bitIndex:0,implDisambiguator:null,};id+=1;searchIndex.push(crateRow);currentIndex+=1;if(!searchIndexEmptyDesc.get(crate).contains(0)){descIndex+=1}const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemReexports=new Map(crateCorpus.r);const itemParentIdxs=crateCorpus.i;const implDisambiguator=new Map(crateCorpus.b);const paths=crateCorpus.p;const aliases=crateCorpus.a;const lowercasePaths=[];const itemFunctionDecoder=new VlqHexDecoder(crateCorpus.f,buildFunctionSearchTypeCallback(lowercasePaths),);let len=paths.length;let lastPath=itemPaths.get(0);for(let i=0;i2){path=itemPaths.has(elem[2])?itemPaths.get(elem[2]):lastPath;lastPath=path}const exactPath=elem.length>3?itemPaths.get(elem[3]):path;lowercasePaths.push({ty,name:name.toLowerCase(),path,exactPath});paths[i]={ty,name,path,exactPath}}lastPath="";len=itemTypes.length;for(let i=0;i=descShard.len&&!searchIndexEmptyDesc.get(crate).contains(bitIndex)){descShard={crate,shard:descShard.shard+1,start:descShard.start+descShard.len,len:itemDescShardDecoder.next(),promise:null,resolve:null,};descIndex=0;descShardList.push(descShard)}let word="";if(typeof itemNames[i]==="string"){word=itemNames[i].toLowerCase()}const path=itemPaths.has(i)?itemPaths.get(i):lastPath;const type=itemFunctionDecoder.next();if(type!==null){if(type){const fp=functionTypeFingerprint.subarray(id*4,(id+1)*4);const fps=new Set();for(const t of type.inputs){buildFunctionTypeFingerprint(t,fp,fps)}for(const t of type.output){buildFunctionTypeFingerprint(t,fp,fps)}for(const w of type.where_clause){for(const t of w){buildFunctionTypeFingerprint(t,fp,fps)}}}}const row={crate,ty:itemTypes.charCodeAt(i)-charA,name:itemNames[i],path,descShard,descIndex,exactPath:itemReexports.has(i)?itemPaths.get(itemReexports.get(i)):path,parent:itemParentIdxs[i]>0?paths[itemParentIdxs[i]-1]:undefined,type,id,word,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),bitIndex,implDisambiguator:implDisambiguator.has(i)?implDisambiguator.get(i):null,};id+=1;searchIndex.push(row);lastPath=row.path;if(!searchIndexEmptyDesc.get(crate).contains(bitIndex)){descIndex+=1}}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!Object.prototype.hasOwnProperty.call(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=itemTypes.length;searchState.descShards.set(crate,descShardList)}TYPES_POOL=new Map()}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;e.preventDefault();search()}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(true)}buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch(new Map())}})() \ No newline at end of file diff --git a/docs/static.files/settings-4313503d2e1961c2.js b/docs/static.files/settings-0f613d39.js similarity index 50% rename from docs/static.files/settings-4313503d2e1961c2.js rename to docs/static.files/settings-0f613d39.js index ab425fe..4a30479 100644 --- a/docs/static.files/settings-4313503d2e1961c2.js +++ b/docs/static.files/settings-0f613d39.js @@ -1,4 +1,4 @@ -"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){window.rustdoc_add_line_numbers_to_examples()}else{window.rustdoc_remove_line_numbers_from_examples()}break;case"hide-sidebar":if(value===true){addClass(document.documentElement,"hide-sidebar")}else{removeClass(document.documentElement,"hide-sidebar")}break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=()=>{changeSetting(toggle.id,toggle.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ +"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){window.rustdoc_add_line_numbers_to_examples()}else{window.rustdoc_remove_line_numbers_from_examples()}break;case"hide-sidebar":if(value===true){addClass(document.documentElement,"hide-sidebar")}else{removeClass(document.documentElement,"hide-sidebar")}break;case"hide-toc":if(value===true){addClass(document.documentElement,"hide-toc")}else{removeClass(document.documentElement,"hide-toc")}break;case"hide-modnav":if(value===true){addClass(document.documentElement,"hide-modnav")}else{removeClass(document.documentElement,"hide-modnav")}break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=()=>{changeSetting(toggle.id,toggle.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){if(setting==="hr"){output+="
";continue}const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\
${setting_name}
`;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ @@ -14,4 +14,4 @@ \ ${setting_name}\ \ -
`}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Hide persistent navigation bar","js_name":"hide-sidebar","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
${buildSettingsPageSections(settings)}
`;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display="";onEachLazy(settingsMenu.querySelectorAll("input[type='checkbox']"),el=>{const val=getSettingValue(el.id);const checked=val==="true";if(checked!==el.checked&&val!==null){el.checked=checked}})}function settingsBlurHandler(event){blurHandler(event,getSettingsButton(),window.hidePopoverMenus)}if(isSettingsPage){getSettingsButton().onclick=event=>{event.preventDefault()}}else{const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=event=>{if(settingsMenu.contains(event.target)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file +
`}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Hide persistent navigation bar","js_name":"hide-sidebar","default":false,},{"name":"Hide table of contents","js_name":"hide-toc","default":false,},{"name":"Hide module navigation","js_name":"hide-modnav","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
${buildSettingsPageSections(settings)}
`;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display="";onEachLazy(settingsMenu.querySelectorAll("input[type='checkbox']"),el=>{const val=getSettingValue(el.id);const checked=val==="true";if(checked!==el.checked&&val!==null){el.checked=checked}})}function settingsBlurHandler(event){if(!getHelpButton().contains(document.activeElement)&&!getHelpButton().contains(event.relatedTarget)&&!getSettingsButton().contains(document.activeElement)&&!getSettingsButton().contains(event.relatedTarget)){window.hidePopoverMenus()}}if(!isSettingsPage){const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=event=>{if(settingsMenu.contains(event.target)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/docs/static.files/src-script-e66d777a5a92e9b2.js b/docs/static.files/src-script-56102188.js similarity index 100% rename from docs/static.files/src-script-e66d777a5a92e9b2.js rename to docs/static.files/src-script-56102188.js diff --git a/docs/static.files/storage-e32f0c247825364d.js b/docs/static.files/storage-59e33391.js similarity index 58% rename from docs/static.files/storage-e32f0c247825364d.js rename to docs/static.files/storage-59e33391.js index 61ddce2..5aac776 100644 --- a/docs/static.files/storage-e32f0c247825364d.js +++ b/docs/static.files/storage-59e33391.js @@ -1 +1,23 @@ -"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func){for(const elem of arr){if(func(elem)){return true}}return false}function onEachLazy(lazyArray,func){return onEach(Array.prototype.slice.call(lazyArray),func)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){const themeNames=getVar("themes").split(",").filter(t=>t);themeNames.push(...builtinThemes);if(themeNames.indexOf(newThemeName)===-1){return}if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+encodeURIComponent(newThemeName)+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}if(getSettingValue("hide-sidebar")==="true"){addClass(document.documentElement,"hide-sidebar")}function updateSidebarWidth(){const desktopSidebarWidth=getSettingValue("desktop-sidebar-width");if(desktopSidebarWidth&&desktopSidebarWidth!=="null"){document.documentElement.style.setProperty("--desktop-sidebar-width",desktopSidebarWidth+"px",)}const srcSidebarWidth=getSettingValue("src-sidebar-width");if(srcSidebarWidth&&srcSidebarWidth!=="null"){document.documentElement.style.setProperty("--src-sidebar-width",srcSidebarWidth+"px",)}}updateSidebarWidth();window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0);setTimeout(updateSidebarWidth,0)}}) \ No newline at end of file +"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func){for(const elem of arr){if(func(elem)){return true}}return false}function onEachLazy(lazyArray,func){return onEach(Array.prototype.slice.call(lazyArray),func)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){const themeNames=getVar("themes").split(",").filter(t=>t);themeNames.push(...builtinThemes);if(themeNames.indexOf(newThemeName)===-1){return}if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+encodeURIComponent(newThemeName)+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}if(getSettingValue("hide-sidebar")==="true"){addClass(document.documentElement,"hide-sidebar")}if(getSettingValue("hide-toc")==="true"){addClass(document.documentElement,"hide-toc")}if(getSettingValue("hide-modnav")==="true"){addClass(document.documentElement,"hide-modnav")}function updateSidebarWidth(){const desktopSidebarWidth=getSettingValue("desktop-sidebar-width");if(desktopSidebarWidth&&desktopSidebarWidth!=="null"){document.documentElement.style.setProperty("--desktop-sidebar-width",desktopSidebarWidth+"px",)}const srcSidebarWidth=getSettingValue("src-sidebar-width");if(srcSidebarWidth&&srcSidebarWidth!=="null"){document.documentElement.style.setProperty("--src-sidebar-width",srcSidebarWidth+"px",)}}updateSidebarWidth();window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0);setTimeout(updateSidebarWidth,0)}});class RustdocSearchElement extends HTMLElement{constructor(){super()}connectedCallback(){const rootPath=getVar("root-path");const currentCrate=getVar("current-crate");this.innerHTML=``}}window.customElements.define("rustdoc-search",RustdocSearchElement);class RustdocToolbarElement extends HTMLElement{constructor(){super()}connectedCallback(){if(this.firstElementChild){return}const rootPath=getVar("root-path");this.innerHTML=` +
+ Settings +
+
+ Help +
+ `}}window.customElements.define("rustdoc-toolbar",RustdocToolbarElement) \ No newline at end of file diff --git a/docs/static.files/wheel-63255fc4502dca9a.svg b/docs/static.files/wheel-63255fc4502dca9a.svg deleted file mode 100644 index ba30f13..0000000 --- a/docs/static.files/wheel-63255fc4502dca9a.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/trait.impl/casper_event_standard/trait.EventInstance.js b/docs/trait.impl/casper_event_standard/trait.EventInstance.js index 1d57903..af8ae48 100644 --- a/docs/trait.impl/casper_event_standard/trait.EventInstance.js +++ b/docs/trait.impl/casper_event_standard/trait.EventInstance.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl EventInstance for PaymentFulfilled"],["impl EventInstance for ResolutionChanged"],["impl EventInstance for ResolutionCleared"],["impl EventInstance for PrimaryNameChanged"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl EventInstance for PaymentFulfilled"],["impl EventInstance for SignerPublicKeyChanged"],["impl EventInstance for TreasuryAddressChanged"],["impl EventInstance for GracePeriodChanged"],["impl EventInstance for NameTokenAddressChanged"],["impl EventInstance for ResolutionChanged"],["impl EventInstance for ResolutionCleared"],["impl EventInstance for PrimaryNameChanged"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1932]} \ No newline at end of file diff --git a/docs/trait.impl/casper_name_contracts/contracts/token_id/trait.ToTokenId.js b/docs/trait.impl/casper_name_contracts/contracts/token_id/trait.ToTokenId.js new file mode 100644 index 0000000..96e4ea2 --- /dev/null +++ b/docs/trait.impl/casper_name_contracts/contracts/token_id/trait.ToTokenId.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[28]} \ No newline at end of file diff --git a/docs/trait.impl/casper_name_contracts/data_structures/trait.ExpirableVoucher.js b/docs/trait.impl/casper_name_contracts/data_structures/trait.ExpirableVoucher.js index 46d5d29..96e4ea2 100644 --- a/docs/trait.impl/casper_name_contracts/data_structures/trait.ExpirableVoucher.js +++ b/docs/trait.impl/casper_name_contracts/data_structures/trait.ExpirableVoucher.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[28]} \ No newline at end of file diff --git a/docs/trait.impl/casper_name_contracts/data_structures/trait.Payment.js b/docs/trait.impl/casper_name_contracts/data_structures/trait.Payment.js index 46d5d29..96e4ea2 100644 --- a/docs/trait.impl/casper_name_contracts/data_structures/trait.Payment.js +++ b/docs/trait.impl/casper_name_contracts/data_structures/trait.Payment.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[28]} \ No newline at end of file diff --git a/docs/trait.impl/casper_types/bytesrepr/trait.FromBytes.js b/docs/trait.impl/casper_types/bytesrepr/trait.FromBytes.js index 3a6bfb6..aa84931 100644 --- a/docs/trait.impl/casper_types/bytesrepr/trait.FromBytes.js +++ b/docs/trait.impl/casper_types/bytesrepr/trait.FromBytes.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl FromBytes for PaymentFulfilled"],["impl FromBytes for ResolutionChanged"],["impl FromBytes for ResolutionCleared"],["impl FromBytes for PrimaryNameChanged"],["impl FromBytes for NameMintInfo"],["impl FromBytes for NameTransferInfo"],["impl FromBytes for PaymentInfo"],["impl FromBytes for PaymentVoucher"],["impl FromBytes for RenewalPaymentVoucher"],["impl FromBytes for RenewalVoucher"],["impl FromBytes for SecondarySaleVoucher"],["impl FromBytes for TokenRenewalInfo"],["impl FromBytes for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl FromBytes for PaymentFulfilled"],["impl FromBytes for SignerPublicKeyChanged"],["impl FromBytes for TreasuryAddressChanged"],["impl FromBytes for GracePeriodChanged"],["impl FromBytes for NameTokenAddressChanged"],["impl FromBytes for ResolutionChanged"],["impl FromBytes for ResolutionCleared"],["impl FromBytes for PrimaryNameChanged"],["impl FromBytes for NameMintInfo"],["impl FromBytes for NameTransferInfo"],["impl FromBytes for PaymentInfo"],["impl FromBytes for PaymentVoucher"],["impl FromBytes for RenewalPaymentVoucher"],["impl FromBytes for RenewalVoucher"],["impl FromBytes for SecondarySaleVoucher"],["impl FromBytes for TokenRenewalInfo"],["impl FromBytes for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[6577]} \ No newline at end of file diff --git a/docs/trait.impl/casper_types/bytesrepr/trait.ToBytes.js b/docs/trait.impl/casper_types/bytesrepr/trait.ToBytes.js index c669cad..041f658 100644 --- a/docs/trait.impl/casper_types/bytesrepr/trait.ToBytes.js +++ b/docs/trait.impl/casper_types/bytesrepr/trait.ToBytes.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl ToBytes for PaymentFulfilled"],["impl ToBytes for ResolutionChanged"],["impl ToBytes for ResolutionCleared"],["impl ToBytes for PrimaryNameChanged"],["impl ToBytes for NameMintInfo"],["impl ToBytes for NameTransferInfo"],["impl ToBytes for PaymentInfo"],["impl ToBytes for PaymentVoucher"],["impl ToBytes for RenewalPaymentVoucher"],["impl ToBytes for RenewalVoucher"],["impl ToBytes for SecondarySaleVoucher"],["impl ToBytes for TokenRenewalInfo"],["impl ToBytes for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl ToBytes for PaymentFulfilled"],["impl ToBytes for SignerPublicKeyChanged"],["impl ToBytes for TreasuryAddressChanged"],["impl ToBytes for GracePeriodChanged"],["impl ToBytes for NameTokenAddressChanged"],["impl ToBytes for ResolutionChanged"],["impl ToBytes for ResolutionCleared"],["impl ToBytes for PrimaryNameChanged"],["impl ToBytes for NameMintInfo"],["impl ToBytes for NameTransferInfo"],["impl ToBytes for PaymentInfo"],["impl ToBytes for PaymentVoucher"],["impl ToBytes for RenewalPaymentVoucher"],["impl ToBytes for RenewalVoucher"],["impl ToBytes for SecondarySaleVoucher"],["impl ToBytes for TokenRenewalInfo"],["impl ToBytes for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[6475]} \ No newline at end of file diff --git a/docs/trait.impl/casper_types/cl_type/trait.CLTyped.js b/docs/trait.impl/casper_types/cl_type/trait.CLTyped.js index a2fbed9..403f7c9 100644 --- a/docs/trait.impl/casper_types/cl_type/trait.CLTyped.js +++ b/docs/trait.impl/casper_types/cl_type/trait.CLTyped.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl CLTyped for PaymentFulfilled"],["impl CLTyped for ResolutionChanged"],["impl CLTyped for ResolutionCleared"],["impl CLTyped for PrimaryNameChanged"],["impl CLTyped for NameMintInfo"],["impl CLTyped for NameTransferInfo"],["impl CLTyped for PaymentInfo"],["impl CLTyped for PaymentVoucher"],["impl CLTyped for RenewalPaymentVoucher"],["impl CLTyped for RenewalVoucher"],["impl CLTyped for SecondarySaleVoucher"],["impl CLTyped for TokenRenewalInfo"],["impl CLTyped for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl CLTyped for PaymentFulfilled"],["impl CLTyped for SignerPublicKeyChanged"],["impl CLTyped for TreasuryAddressChanged"],["impl CLTyped for GracePeriodChanged"],["impl CLTyped for NameTokenAddressChanged"],["impl CLTyped for ResolutionChanged"],["impl CLTyped for ResolutionCleared"],["impl CLTyped for PrimaryNameChanged"],["impl CLTyped for NameMintInfo"],["impl CLTyped for NameTransferInfo"],["impl CLTyped for PaymentInfo"],["impl CLTyped for PaymentVoucher"],["impl CLTyped for RenewalPaymentVoucher"],["impl CLTyped for RenewalVoucher"],["impl CLTyped for SecondarySaleVoucher"],["impl CLTyped for TokenRenewalInfo"],["impl CLTyped for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[6407]} \ No newline at end of file diff --git a/docs/trait.impl/core/clone/trait.Clone.js b/docs/trait.impl/core/clone/trait.Clone.js index 412e24c..6dc1854 100644 --- a/docs/trait.impl/core/clone/trait.Clone.js +++ b/docs/trait.impl/core/clone/trait.Clone.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl Clone for NameMintInfo"],["impl Clone for NameTokenMetadata"],["impl Clone for NameTransferInfo"],["impl Clone for PaymentInfo"],["impl Clone for PaymentVoucher"],["impl Clone for RenewalPaymentVoucher"],["impl Clone for RenewalVoucher"],["impl Clone for SecondarySaleVoucher"],["impl Clone for TokenRenewalInfo"],["impl Clone for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl Clone for NameMintInfo"],["impl Clone for NameTokenMetadata"],["impl Clone for NameTransferInfo"],["impl Clone for PaymentInfo"],["impl Clone for PaymentVoucher"],["impl Clone for RenewalPaymentVoucher"],["impl Clone for RenewalVoucher"],["impl Clone for SecondarySaleVoucher"],["impl Clone for TokenRenewalInfo"],["impl Clone for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[3417]} \ No newline at end of file diff --git a/docs/trait.impl/core/cmp/trait.Eq.js b/docs/trait.impl/core/cmp/trait.Eq.js index f25860c..73781e0 100644 --- a/docs/trait.impl/core/cmp/trait.Eq.js +++ b/docs/trait.impl/core/cmp/trait.Eq.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl Eq for PaymentFulfilled"],["impl Eq for ResolutionChanged"],["impl Eq for ResolutionCleared"],["impl Eq for PrimaryNameChanged"],["impl Eq for NameMintInfo"],["impl Eq for NameTransferInfo"],["impl Eq for PaymentInfo"],["impl Eq for PaymentVoucher"],["impl Eq for RenewalPaymentVoucher"],["impl Eq for RenewalVoucher"],["impl Eq for SecondarySaleVoucher"],["impl Eq for TokenRenewalInfo"],["impl Eq for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl Eq for PaymentFulfilled"],["impl Eq for SignerPublicKeyChanged"],["impl Eq for TreasuryAddressChanged"],["impl Eq for GracePeriodChanged"],["impl Eq for NameTokenAddressChanged"],["impl Eq for ResolutionChanged"],["impl Eq for ResolutionCleared"],["impl Eq for PrimaryNameChanged"],["impl Eq for NameMintInfo"],["impl Eq for NameTransferInfo"],["impl Eq for PaymentInfo"],["impl Eq for PaymentVoucher"],["impl Eq for RenewalPaymentVoucher"],["impl Eq for RenewalVoucher"],["impl Eq for SecondarySaleVoucher"],["impl Eq for TokenRenewalInfo"],["impl Eq for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[5727]} \ No newline at end of file diff --git a/docs/trait.impl/core/cmp/trait.PartialEq.js b/docs/trait.impl/core/cmp/trait.PartialEq.js index 269febc..68cf663 100644 --- a/docs/trait.impl/core/cmp/trait.PartialEq.js +++ b/docs/trait.impl/core/cmp/trait.PartialEq.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl PartialEq for PaymentFulfilled"],["impl PartialEq for ResolutionChanged"],["impl PartialEq for ResolutionCleared"],["impl PartialEq for PrimaryNameChanged"],["impl PartialEq for NameMintInfo"],["impl PartialEq for NameTokenMetadata"],["impl PartialEq for NameTransferInfo"],["impl PartialEq for PaymentInfo"],["impl PartialEq for PaymentVoucher"],["impl PartialEq for RenewalPaymentVoucher"],["impl PartialEq for RenewalVoucher"],["impl PartialEq for SecondarySaleVoucher"],["impl PartialEq for TokenRenewalInfo"],["impl PartialEq for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl PartialEq for PaymentFulfilled"],["impl PartialEq for SignerPublicKeyChanged"],["impl PartialEq for TreasuryAddressChanged"],["impl PartialEq for GracePeriodChanged"],["impl PartialEq for NameTokenAddressChanged"],["impl PartialEq for ResolutionChanged"],["impl PartialEq for ResolutionCleared"],["impl PartialEq for PrimaryNameChanged"],["impl PartialEq for NameMintInfo"],["impl PartialEq for NameTokenMetadata"],["impl PartialEq for NameTransferInfo"],["impl PartialEq for PaymentInfo"],["impl PartialEq for PaymentVoucher"],["impl PartialEq for RenewalPaymentVoucher"],["impl PartialEq for RenewalVoucher"],["impl PartialEq for SecondarySaleVoucher"],["impl PartialEq for TokenRenewalInfo"],["impl PartialEq for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[6434]} \ No newline at end of file diff --git a/docs/trait.impl/core/convert/trait.From.js b/docs/trait.impl/core/convert/trait.From.js index c8c21ca..301552d 100644 --- a/docs/trait.impl/core/convert/trait.From.js +++ b/docs/trait.impl/core/convert/trait.From.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl From<ControllerError> for OdraError"],["impl From<NameTokenError> for OdraError"],["impl From<RegistrarError> for OdraError"],["impl From<ResolverError> for OdraError"],["impl From<NameTokenError> for OdraError"],["impl From<PaymentVoucher> for TokenizationVoucher"],["impl From<RenewalPaymentVoucher> for RenewalVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl From<ControllerError> for OdraError"],["impl From<NameTokenError> for OdraError"],["impl From<RegistrarError> for OdraError"],["impl From<ResolverError> for OdraError"],["impl From<NameTokenError> for OdraError"],["impl From<PaymentVoucher> for TokenizationVoucher"],["impl From<RenewalPaymentVoucher> for RenewalVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[2878]} \ No newline at end of file diff --git a/docs/trait.impl/core/convert/trait.Into.js b/docs/trait.impl/core/convert/trait.Into.js index c458d7b..e43109f 100644 --- a/docs/trait.impl/core/convert/trait.Into.js +++ b/docs/trait.impl/core/convert/trait.Into.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl Into<RuntimeArgs> for ControllerInitArgs"],["impl Into<RuntimeArgs> for SecondaryMarketInitArgs"],["impl Into<RuntimeArgs> for NameTokenInitArgs"],["impl Into<RuntimeArgs> for RegistrarInitArgs"],["impl Into<RuntimeArgs> for DefaultResolverInitArgs"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl Into<RuntimeArgs> for ControllerInitArgs"],["impl Into<RuntimeArgs> for SecondaryMarketInitArgs"],["impl Into<RuntimeArgs> for NameTokenInitArgs"],["impl Into<RuntimeArgs> for RegistrarInitArgs"],["impl Into<RuntimeArgs> for DefaultResolverInitArgs"],["impl Into<RuntimeArgs> for ReverseResolverInitArgs"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[3530]} \ No newline at end of file diff --git a/docs/trait.impl/core/convert/trait.TryFrom.js b/docs/trait.impl/core/convert/trait.TryFrom.js index 6d7b04f..7bad6b6 100644 --- a/docs/trait.impl/core/convert/trait.TryFrom.js +++ b/docs/trait.impl/core/convert/trait.TryFrom.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl TryFrom<String> for NameTokenMetadata"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl TryFrom<String> for NameTokenMetadata"],["impl TryFrom<Vec<(String, String)>> for NameTokenMetadata"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1320]} \ No newline at end of file diff --git a/docs/trait.impl/core/fmt/trait.Debug.js b/docs/trait.impl/core/fmt/trait.Debug.js index 5516391..113fb30 100644 --- a/docs/trait.impl/core/fmt/trait.Debug.js +++ b/docs/trait.impl/core/fmt/trait.Debug.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl Debug for NameTokenError"],["impl Debug for PaymentFulfilled"],["impl Debug for ResolutionChanged"],["impl Debug for ResolutionCleared"],["impl Debug for PrimaryNameChanged"],["impl Debug for NameMintInfo"],["impl Debug for NameTokenMetadata"],["impl Debug for NameTransferInfo"],["impl Debug for PaymentInfo"],["impl Debug for PaymentVoucher"],["impl Debug for RenewalPaymentVoucher"],["impl Debug for RenewalVoucher"],["impl Debug for SecondarySaleVoucher"],["impl Debug for TokenRenewalInfo"],["impl Debug for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl Debug for NameTokenError"],["impl Debug for PaymentFulfilled"],["impl Debug for SignerPublicKeyChanged"],["impl Debug for TreasuryAddressChanged"],["impl Debug for GracePeriodChanged"],["impl Debug for NameTokenAddressChanged"],["impl Debug for ResolutionChanged"],["impl Debug for ResolutionCleared"],["impl Debug for PrimaryNameChanged"],["impl Debug for NameMintInfo"],["impl Debug for NameTokenMetadata"],["impl Debug for NameTransferInfo"],["impl Debug for PaymentInfo"],["impl Debug for PaymentVoucher"],["impl Debug for RenewalPaymentVoucher"],["impl Debug for RenewalVoucher"],["impl Debug for SecondarySaleVoucher"],["impl Debug for TokenRenewalInfo"],["impl Debug for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[6541]} \ No newline at end of file diff --git a/docs/trait.impl/core/marker/trait.Freeze.js b/docs/trait.impl/core/marker/trait.Freeze.js index 9e545c0..fb55bf3 100644 --- a/docs/trait.impl/core/marker/trait.Freeze.js +++ b/docs/trait.impl/core/marker/trait.Freeze.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl !Freeze for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl !Freeze for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl !Freeze for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl !Freeze for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl !Freeze for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl !Freeze for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl Freeze for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl Freeze for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl Freeze for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl Freeze for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl Freeze for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl Freeze for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl Freeze for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl Freeze for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl Freeze for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl Freeze for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl Freeze for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl Freeze for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl Freeze for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl Freeze for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl Freeze for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl Freeze for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl Freeze for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl Freeze for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl Freeze for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl Freeze for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl Freeze for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl Freeze for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl Freeze for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl Freeze for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl Freeze for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl Freeze for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl Freeze for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl Freeze for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl Freeze for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl Freeze for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl Freeze for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl Freeze for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl Freeze for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl Freeze for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl Freeze for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl Freeze for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl Freeze for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl Freeze for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl Freeze for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl Freeze for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl Freeze for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl !Freeze for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl !Freeze for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl !Freeze for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl !Freeze for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl !Freeze for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl !Freeze for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl !Freeze for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl Freeze for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl Freeze for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl Freeze for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl Freeze for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl Freeze for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl Freeze for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl Freeze for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl Freeze for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl Freeze for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl Freeze for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl Freeze for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl Freeze for SignerPublicKeyChanged",1,["casper_name_contracts::contracts::controller::SignerPublicKeyChanged"]],["impl Freeze for TreasuryAddressChanged",1,["casper_name_contracts::contracts::controller::TreasuryAddressChanged"]],["impl Freeze for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl Freeze for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl Freeze for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl Freeze for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl Freeze for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl Freeze for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl Freeze for GracePeriodChanged",1,["casper_name_contracts::contracts::registrar::GracePeriodChanged"]],["impl Freeze for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl Freeze for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl Freeze for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl Freeze for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl Freeze for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl Freeze for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl Freeze for NameTokenAddressChanged",1,["casper_name_contracts::contracts::resolver::NameTokenAddressChanged"]],["impl Freeze for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl Freeze for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl Freeze for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl Freeze for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl Freeze for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl Freeze for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl Freeze for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl Freeze for ReverseResolverInitArgs",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverInitArgs"]],["impl Freeze for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl Freeze for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl Freeze for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl Freeze for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl Freeze for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl Freeze for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl Freeze for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl Freeze for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl Freeze for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl Freeze for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[22648]} \ No newline at end of file diff --git a/docs/trait.impl/core/marker/trait.Send.js b/docs/trait.impl/core/marker/trait.Send.js index 9fccb24..1a58a76 100644 --- a/docs/trait.impl/core/marker/trait.Send.js +++ b/docs/trait.impl/core/marker/trait.Send.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl !Send for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl !Send for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl !Send for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl !Send for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl !Send for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl !Send for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl !Send for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl !Send for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl !Send for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl !Send for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl !Send for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl !Send for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl !Send for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl !Send for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl !Send for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl !Send for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl !Send for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl !Send for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl !Send for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl !Send for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl !Send for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl !Send for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl !Send for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl Send for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl Send for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl Send for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl Send for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl Send for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl Send for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl Send for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl Send for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl Send for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl Send for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl Send for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl Send for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl Send for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl Send for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl Send for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl Send for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl Send for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl Send for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl Send for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl Send for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl Send for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl Send for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl Send for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl Send for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl !Send for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl !Send for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl !Send for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl !Send for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl !Send for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl !Send for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl !Send for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl !Send for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl !Send for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl !Send for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl !Send for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl !Send for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl !Send for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl !Send for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl !Send for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl !Send for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl !Send for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl !Send for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl !Send for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl !Send for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl !Send for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl !Send for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl !Send for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl Send for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl Send for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl Send for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl Send for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl Send for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl Send for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl Send for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl Send for SignerPublicKeyChanged",1,["casper_name_contracts::contracts::controller::SignerPublicKeyChanged"]],["impl Send for TreasuryAddressChanged",1,["casper_name_contracts::contracts::controller::TreasuryAddressChanged"]],["impl Send for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl Send for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl Send for GracePeriodChanged",1,["casper_name_contracts::contracts::registrar::GracePeriodChanged"]],["impl Send for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl Send for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl Send for NameTokenAddressChanged",1,["casper_name_contracts::contracts::resolver::NameTokenAddressChanged"]],["impl Send for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl Send for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl Send for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl Send for ReverseResolverInitArgs",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverInitArgs"]],["impl Send for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl Send for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl Send for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl Send for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl Send for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl Send for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl Send for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl Send for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl Send for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl Send for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[22352]} \ No newline at end of file diff --git a/docs/trait.impl/core/marker/trait.StructuralPartialEq.js b/docs/trait.impl/core/marker/trait.StructuralPartialEq.js index dcc769f..253e424 100644 --- a/docs/trait.impl/core/marker/trait.StructuralPartialEq.js +++ b/docs/trait.impl/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl StructuralPartialEq for PaymentFulfilled"],["impl StructuralPartialEq for ResolutionChanged"],["impl StructuralPartialEq for ResolutionCleared"],["impl StructuralPartialEq for PrimaryNameChanged"],["impl StructuralPartialEq for NameMintInfo"],["impl StructuralPartialEq for NameTokenMetadata"],["impl StructuralPartialEq for NameTransferInfo"],["impl StructuralPartialEq for PaymentInfo"],["impl StructuralPartialEq for PaymentVoucher"],["impl StructuralPartialEq for RenewalPaymentVoucher"],["impl StructuralPartialEq for RenewalVoucher"],["impl StructuralPartialEq for SecondarySaleVoucher"],["impl StructuralPartialEq for TokenRenewalInfo"],["impl StructuralPartialEq for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl StructuralPartialEq for PaymentFulfilled"],["impl StructuralPartialEq for SignerPublicKeyChanged"],["impl StructuralPartialEq for TreasuryAddressChanged"],["impl StructuralPartialEq for GracePeriodChanged"],["impl StructuralPartialEq for NameTokenAddressChanged"],["impl StructuralPartialEq for ResolutionChanged"],["impl StructuralPartialEq for ResolutionCleared"],["impl StructuralPartialEq for PrimaryNameChanged"],["impl StructuralPartialEq for NameMintInfo"],["impl StructuralPartialEq for NameTokenMetadata"],["impl StructuralPartialEq for NameTransferInfo"],["impl StructuralPartialEq for PaymentInfo"],["impl StructuralPartialEq for PaymentVoucher"],["impl StructuralPartialEq for RenewalPaymentVoucher"],["impl StructuralPartialEq for RenewalVoucher"],["impl StructuralPartialEq for SecondarySaleVoucher"],["impl StructuralPartialEq for TokenRenewalInfo"],["impl StructuralPartialEq for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[7082]} \ No newline at end of file diff --git a/docs/trait.impl/core/marker/trait.Sync.js b/docs/trait.impl/core/marker/trait.Sync.js index 38d3c14..d8a525c 100644 --- a/docs/trait.impl/core/marker/trait.Sync.js +++ b/docs/trait.impl/core/marker/trait.Sync.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl !Sync for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl !Sync for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl !Sync for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl !Sync for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl !Sync for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl !Sync for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl !Sync for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl !Sync for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl !Sync for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl !Sync for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl !Sync for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl !Sync for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl !Sync for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl !Sync for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl !Sync for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl !Sync for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl !Sync for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl !Sync for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl !Sync for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl !Sync for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl !Sync for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl !Sync for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl !Sync for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl Sync for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl Sync for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl Sync for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl Sync for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl Sync for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl Sync for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl Sync for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl Sync for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl Sync for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl Sync for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl Sync for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl Sync for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl Sync for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl Sync for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl Sync for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl Sync for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl Sync for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl Sync for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl Sync for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl Sync for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl Sync for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl Sync for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl Sync for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl Sync for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl !Sync for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl !Sync for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl !Sync for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl !Sync for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl !Sync for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl !Sync for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl !Sync for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl !Sync for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl !Sync for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl !Sync for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl !Sync for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl !Sync for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl !Sync for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl !Sync for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl !Sync for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl !Sync for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl !Sync for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl !Sync for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl !Sync for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl !Sync for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl !Sync for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl !Sync for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl !Sync for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl Sync for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl Sync for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl Sync for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl Sync for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl Sync for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl Sync for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl Sync for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl Sync for SignerPublicKeyChanged",1,["casper_name_contracts::contracts::controller::SignerPublicKeyChanged"]],["impl Sync for TreasuryAddressChanged",1,["casper_name_contracts::contracts::controller::TreasuryAddressChanged"]],["impl Sync for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl Sync for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl Sync for GracePeriodChanged",1,["casper_name_contracts::contracts::registrar::GracePeriodChanged"]],["impl Sync for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl Sync for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl Sync for NameTokenAddressChanged",1,["casper_name_contracts::contracts::resolver::NameTokenAddressChanged"]],["impl Sync for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl Sync for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl Sync for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl Sync for ReverseResolverInitArgs",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverInitArgs"]],["impl Sync for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl Sync for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl Sync for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl Sync for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl Sync for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl Sync for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl Sync for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl Sync for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl Sync for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl Sync for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[22352]} \ No newline at end of file diff --git a/docs/trait.impl/core/marker/trait.Unpin.js b/docs/trait.impl/core/marker/trait.Unpin.js index a93d44a..ff6db13 100644 --- a/docs/trait.impl/core/marker/trait.Unpin.js +++ b/docs/trait.impl/core/marker/trait.Unpin.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl Unpin for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl Unpin for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl Unpin for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl Unpin for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl Unpin for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl Unpin for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl Unpin for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl Unpin for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl Unpin for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl Unpin for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl Unpin for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl Unpin for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl Unpin for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl Unpin for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl Unpin for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl Unpin for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl Unpin for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl Unpin for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl Unpin for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl Unpin for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl Unpin for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl Unpin for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl Unpin for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl Unpin for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl Unpin for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl Unpin for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl Unpin for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl Unpin for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl Unpin for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl Unpin for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl Unpin for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl Unpin for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl Unpin for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl Unpin for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl Unpin for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl Unpin for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl Unpin for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl Unpin for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl Unpin for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl Unpin for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl Unpin for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl Unpin for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl Unpin for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl Unpin for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl Unpin for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl Unpin for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl Unpin for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl Unpin for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl Unpin for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl Unpin for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl Unpin for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl Unpin for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl Unpin for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl Unpin for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl Unpin for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl Unpin for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl Unpin for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl Unpin for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl Unpin for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl Unpin for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl Unpin for SignerPublicKeyChanged",1,["casper_name_contracts::contracts::controller::SignerPublicKeyChanged"]],["impl Unpin for TreasuryAddressChanged",1,["casper_name_contracts::contracts::controller::TreasuryAddressChanged"]],["impl Unpin for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl Unpin for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl Unpin for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl Unpin for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl Unpin for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl Unpin for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl Unpin for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl Unpin for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl Unpin for GracePeriodChanged",1,["casper_name_contracts::contracts::registrar::GracePeriodChanged"]],["impl Unpin for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl Unpin for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl Unpin for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl Unpin for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl Unpin for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl Unpin for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl Unpin for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl Unpin for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl Unpin for NameTokenAddressChanged",1,["casper_name_contracts::contracts::resolver::NameTokenAddressChanged"]],["impl Unpin for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl Unpin for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl Unpin for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl Unpin for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl Unpin for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl Unpin for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl Unpin for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl Unpin for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl Unpin for ReverseResolverInitArgs",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverInitArgs"]],["impl Unpin for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl Unpin for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl Unpin for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl Unpin for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl Unpin for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl Unpin for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl Unpin for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl Unpin for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl Unpin for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl Unpin for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[22485]} \ No newline at end of file diff --git a/docs/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js index 67cee95..9a4d4ea 100644 --- a/docs/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/docs/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl !RefUnwindSafe for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl !RefUnwindSafe for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl !RefUnwindSafe for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl !RefUnwindSafe for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl !RefUnwindSafe for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl !RefUnwindSafe for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl !RefUnwindSafe for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl !RefUnwindSafe for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl !RefUnwindSafe for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl !RefUnwindSafe for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl !RefUnwindSafe for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl !RefUnwindSafe for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl !RefUnwindSafe for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl !RefUnwindSafe for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl !RefUnwindSafe for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl !RefUnwindSafe for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl !RefUnwindSafe for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl !RefUnwindSafe for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl !RefUnwindSafe for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl !RefUnwindSafe for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl !RefUnwindSafe for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl !RefUnwindSafe for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl !RefUnwindSafe for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl RefUnwindSafe for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl RefUnwindSafe for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl RefUnwindSafe for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl RefUnwindSafe for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl RefUnwindSafe for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl RefUnwindSafe for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl RefUnwindSafe for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl RefUnwindSafe for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl RefUnwindSafe for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl RefUnwindSafe for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl RefUnwindSafe for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl RefUnwindSafe for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl RefUnwindSafe for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl RefUnwindSafe for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl RefUnwindSafe for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl RefUnwindSafe for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl RefUnwindSafe for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl RefUnwindSafe for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl RefUnwindSafe for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl RefUnwindSafe for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl RefUnwindSafe for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl RefUnwindSafe for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl RefUnwindSafe for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl RefUnwindSafe for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl !RefUnwindSafe for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl !RefUnwindSafe for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl !RefUnwindSafe for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl !RefUnwindSafe for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl !RefUnwindSafe for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl !RefUnwindSafe for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl !RefUnwindSafe for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl !RefUnwindSafe for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl !RefUnwindSafe for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl !RefUnwindSafe for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl !RefUnwindSafe for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl !RefUnwindSafe for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl !RefUnwindSafe for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl !RefUnwindSafe for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl !RefUnwindSafe for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl !RefUnwindSafe for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl !RefUnwindSafe for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl !RefUnwindSafe for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl !RefUnwindSafe for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl !RefUnwindSafe for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl !RefUnwindSafe for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl !RefUnwindSafe for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl !RefUnwindSafe for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl RefUnwindSafe for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl RefUnwindSafe for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl RefUnwindSafe for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl RefUnwindSafe for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl RefUnwindSafe for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl RefUnwindSafe for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl RefUnwindSafe for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl RefUnwindSafe for SignerPublicKeyChanged",1,["casper_name_contracts::contracts::controller::SignerPublicKeyChanged"]],["impl RefUnwindSafe for TreasuryAddressChanged",1,["casper_name_contracts::contracts::controller::TreasuryAddressChanged"]],["impl RefUnwindSafe for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl RefUnwindSafe for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl RefUnwindSafe for GracePeriodChanged",1,["casper_name_contracts::contracts::registrar::GracePeriodChanged"]],["impl RefUnwindSafe for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl RefUnwindSafe for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl RefUnwindSafe for NameTokenAddressChanged",1,["casper_name_contracts::contracts::resolver::NameTokenAddressChanged"]],["impl RefUnwindSafe for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl RefUnwindSafe for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl RefUnwindSafe for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl RefUnwindSafe for ReverseResolverInitArgs",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverInitArgs"]],["impl RefUnwindSafe for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl RefUnwindSafe for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl RefUnwindSafe for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl RefUnwindSafe for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl RefUnwindSafe for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl RefUnwindSafe for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl RefUnwindSafe for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl RefUnwindSafe for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl RefUnwindSafe for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl RefUnwindSafe for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[24952]} \ No newline at end of file diff --git a/docs/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js index 12b0cf6..4b60cde 100644 --- a/docs/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/docs/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl !UnwindSafe for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl !UnwindSafe for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl !UnwindSafe for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl !UnwindSafe for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl !UnwindSafe for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl !UnwindSafe for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl !UnwindSafe for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl !UnwindSafe for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl !UnwindSafe for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl !UnwindSafe for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl !UnwindSafe for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl !UnwindSafe for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl !UnwindSafe for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl !UnwindSafe for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl !UnwindSafe for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl !UnwindSafe for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl !UnwindSafe for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl !UnwindSafe for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl !UnwindSafe for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl !UnwindSafe for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl !UnwindSafe for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl !UnwindSafe for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl !UnwindSafe for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl UnwindSafe for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl UnwindSafe for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl UnwindSafe for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl UnwindSafe for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl UnwindSafe for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl UnwindSafe for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl UnwindSafe for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl UnwindSafe for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl UnwindSafe for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl UnwindSafe for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl UnwindSafe for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl UnwindSafe for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl UnwindSafe for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl UnwindSafe for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl UnwindSafe for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl UnwindSafe for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl UnwindSafe for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl UnwindSafe for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl UnwindSafe for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl UnwindSafe for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl UnwindSafe for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl UnwindSafe for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl UnwindSafe for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl UnwindSafe for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl !UnwindSafe for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl !UnwindSafe for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl !UnwindSafe for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl !UnwindSafe for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl !UnwindSafe for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl !UnwindSafe for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl !UnwindSafe for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl !UnwindSafe for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl !UnwindSafe for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl !UnwindSafe for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl !UnwindSafe for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl !UnwindSafe for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl !UnwindSafe for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl !UnwindSafe for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl !UnwindSafe for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl !UnwindSafe for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl !UnwindSafe for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl !UnwindSafe for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl !UnwindSafe for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl !UnwindSafe for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl !UnwindSafe for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl !UnwindSafe for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl !UnwindSafe for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl UnwindSafe for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl UnwindSafe for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl UnwindSafe for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl UnwindSafe for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl UnwindSafe for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl UnwindSafe for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl UnwindSafe for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl UnwindSafe for SignerPublicKeyChanged",1,["casper_name_contracts::contracts::controller::SignerPublicKeyChanged"]],["impl UnwindSafe for TreasuryAddressChanged",1,["casper_name_contracts::contracts::controller::TreasuryAddressChanged"]],["impl UnwindSafe for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl UnwindSafe for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl UnwindSafe for GracePeriodChanged",1,["casper_name_contracts::contracts::registrar::GracePeriodChanged"]],["impl UnwindSafe for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl UnwindSafe for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl UnwindSafe for NameTokenAddressChanged",1,["casper_name_contracts::contracts::resolver::NameTokenAddressChanged"]],["impl UnwindSafe for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl UnwindSafe for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl UnwindSafe for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl UnwindSafe for ReverseResolverInitArgs",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverInitArgs"]],["impl UnwindSafe for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl UnwindSafe for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl UnwindSafe for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl UnwindSafe for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl UnwindSafe for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl UnwindSafe for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl UnwindSafe for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl UnwindSafe for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl UnwindSafe for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl UnwindSafe for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[24484]} \ No newline at end of file diff --git a/docs/trait.impl/odra_core/contract/trait.OdraContract.js b/docs/trait.impl/odra_core/contract/trait.OdraContract.js index 3042c10..3a46b80 100644 --- a/docs/trait.impl/odra_core/contract/trait.OdraContract.js +++ b/docs/trait.impl/odra_core/contract/trait.OdraContract.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl OdraContract for BaseController"],["impl OdraContract for Controller"],["impl OdraContract for SecondaryMarket"],["impl OdraContract for NameToken"],["impl OdraContract for Registrar"],["impl OdraContract for DefaultResolver"],["impl OdraContract for ReverseResolver"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl OdraContract for BaseController"],["impl OdraContract for Controller"],["impl OdraContract for SecondaryMarket"],["impl OdraContract for NameToken"],["impl OdraContract for Registrar"],["impl OdraContract for DefaultResolver"],["impl OdraContract for ReverseResolver"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1556]} \ No newline at end of file diff --git a/docs/trait.impl/odra_core/contract_def/trait.HasEntrypoints.js b/docs/trait.impl/odra_core/contract_def/trait.HasEntrypoints.js index e5565ab..aa73ca8 100644 --- a/docs/trait.impl/odra_core/contract_def/trait.HasEntrypoints.js +++ b/docs/trait.impl/odra_core/contract_def/trait.HasEntrypoints.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl HasEntrypoints for BaseController"],["impl HasEntrypoints for Controller"],["impl HasEntrypoints for SecondaryMarket"],["impl HasEntrypoints for NameToken"],["impl HasEntrypoints for Registrar"],["impl HasEntrypoints for DefaultResolver"],["impl HasEntrypoints for ReverseResolver"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl HasEntrypoints for BaseController"],["impl HasEntrypoints for Controller"],["impl HasEntrypoints for SecondaryMarket"],["impl HasEntrypoints for NameToken"],["impl HasEntrypoints for Registrar"],["impl HasEntrypoints for DefaultResolver"],["impl HasEntrypoints for ReverseResolver"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1570]} \ No newline at end of file diff --git a/docs/trait.impl/odra_core/contract_def/trait.HasEvents.js b/docs/trait.impl/odra_core/contract_def/trait.HasEvents.js index 63f22e0..47a41f4 100644 --- a/docs/trait.impl/odra_core/contract_def/trait.HasEvents.js +++ b/docs/trait.impl/odra_core/contract_def/trait.HasEvents.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl HasEvents for BaseController"],["impl HasEvents for Controller"],["impl HasEvents for SecondaryMarket"],["impl HasEvents for NameToken"],["impl HasEvents for Registrar"],["impl HasEvents for DefaultResolver"],["impl HasEvents for ReverseResolver"],["impl HasEvents for NameMintInfo"],["impl HasEvents for NameTransferInfo"],["impl HasEvents for PaymentInfo"],["impl HasEvents for PaymentVoucher"],["impl HasEvents for RenewalPaymentVoucher"],["impl HasEvents for RenewalVoucher"],["impl HasEvents for SecondarySaleVoucher"],["impl HasEvents for TokenRenewalInfo"],["impl HasEvents for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl HasEvents for BaseController"],["impl HasEvents for Controller"],["impl HasEvents for SecondaryMarket"],["impl HasEvents for NameToken"],["impl HasEvents for Registrar"],["impl HasEvents for DefaultResolver"],["impl HasEvents for ReverseResolver"],["impl HasEvents for NameMintInfo"],["impl HasEvents for NameTransferInfo"],["impl HasEvents for PaymentInfo"],["impl HasEvents for PaymentVoucher"],["impl HasEvents for RenewalPaymentVoucher"],["impl HasEvents for RenewalVoucher"],["impl HasEvents for SecondarySaleVoucher"],["impl HasEvents for TokenRenewalInfo"],["impl HasEvents for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[3458]} \ No newline at end of file diff --git a/docs/trait.impl/odra_core/contract_def/trait.HasIdent.js b/docs/trait.impl/odra_core/contract_def/trait.HasIdent.js index 9aa75ca..022de8d 100644 --- a/docs/trait.impl/odra_core/contract_def/trait.HasIdent.js +++ b/docs/trait.impl/odra_core/contract_def/trait.HasIdent.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl HasIdent for BaseController"],["impl HasIdent for BaseControllerHostRef"],["impl HasIdent for Controller"],["impl HasIdent for ControllerHostRef"],["impl HasIdent for SecondaryMarket"],["impl HasIdent for SecondaryMarketHostRef"],["impl HasIdent for NameToken"],["impl HasIdent for NameTokenHostRef"],["impl HasIdent for Registrar"],["impl HasIdent for RegistrarHostRef"],["impl HasIdent for DefaultResolver"],["impl HasIdent for DefaultResolverHostRef"],["impl HasIdent for ReverseResolver"],["impl HasIdent for ReverseResolverHostRef"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl HasIdent for BaseController"],["impl HasIdent for BaseControllerHostRef"],["impl HasIdent for Controller"],["impl HasIdent for ControllerHostRef"],["impl HasIdent for SecondaryMarket"],["impl HasIdent for SecondaryMarketHostRef"],["impl HasIdent for NameToken"],["impl HasIdent for NameTokenHostRef"],["impl HasIdent for Registrar"],["impl HasIdent for RegistrarHostRef"],["impl HasIdent for DefaultResolver"],["impl HasIdent for DefaultResolverHostRef"],["impl HasIdent for ReverseResolver"],["impl HasIdent for ReverseResolverHostRef"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[3176]} \ No newline at end of file diff --git a/docs/trait.impl/odra_core/contract_env/trait.ContractRef.js b/docs/trait.impl/odra_core/contract_env/trait.ContractRef.js index c63431e..3d598c3 100644 --- a/docs/trait.impl/odra_core/contract_env/trait.ContractRef.js +++ b/docs/trait.impl/odra_core/contract_env/trait.ContractRef.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl ContractRef for BaseControllerContractRef"],["impl ContractRef for ControllerContractRef"],["impl ContractRef for SecondaryMarketContractRef"],["impl ContractRef for NameTokenContractRef"],["impl ContractRef for RegistrarContractRef"],["impl ContractRef for DefaultResolverContractRef"],["impl ContractRef for ResolverContractRef"],["impl ContractRef for ReverseResolverContractRef"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl ContractRef for BaseControllerContractRef"],["impl ContractRef for ControllerContractRef"],["impl ContractRef for SecondaryMarketContractRef"],["impl ContractRef for NameTokenContractRef"],["impl ContractRef for RegistrarContractRef"],["impl ContractRef for DefaultResolverContractRef"],["impl ContractRef for ResolverContractRef"],["impl ContractRef for ReverseResolverContractRef"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[2012]} \ No newline at end of file diff --git a/docs/trait.impl/odra_core/host/trait.EntryPointsCallerProvider.js b/docs/trait.impl/odra_core/host/trait.EntryPointsCallerProvider.js index b518a35..95f2a27 100644 --- a/docs/trait.impl/odra_core/host/trait.EntryPointsCallerProvider.js +++ b/docs/trait.impl/odra_core/host/trait.EntryPointsCallerProvider.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl EntryPointsCallerProvider for BaseControllerHostRef"],["impl EntryPointsCallerProvider for ControllerHostRef"],["impl EntryPointsCallerProvider for SecondaryMarketHostRef"],["impl EntryPointsCallerProvider for NameTokenHostRef"],["impl EntryPointsCallerProvider for RegistrarHostRef"],["impl EntryPointsCallerProvider for DefaultResolverHostRef"],["impl EntryPointsCallerProvider for ReverseResolverHostRef"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl EntryPointsCallerProvider for BaseControllerHostRef"],["impl EntryPointsCallerProvider for ControllerHostRef"],["impl EntryPointsCallerProvider for SecondaryMarketHostRef"],["impl EntryPointsCallerProvider for NameTokenHostRef"],["impl EntryPointsCallerProvider for RegistrarHostRef"],["impl EntryPointsCallerProvider for DefaultResolverHostRef"],["impl EntryPointsCallerProvider for ReverseResolverHostRef"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1794]} \ No newline at end of file diff --git a/docs/trait.impl/odra_core/host/trait.HostRef.js b/docs/trait.impl/odra_core/host/trait.HostRef.js index 8c25a56..46f283e 100644 --- a/docs/trait.impl/odra_core/host/trait.HostRef.js +++ b/docs/trait.impl/odra_core/host/trait.HostRef.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl HostRef for BaseControllerHostRef"],["impl HostRef for ControllerHostRef"],["impl HostRef for SecondaryMarketHostRef"],["impl HostRef for NameTokenHostRef"],["impl HostRef for RegistrarHostRef"],["impl HostRef for DefaultResolverHostRef"],["impl HostRef for ResolverHostRef"],["impl HostRef for ReverseResolverHostRef"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl HostRef for BaseControllerHostRef"],["impl HostRef for ControllerHostRef"],["impl HostRef for SecondaryMarketHostRef"],["impl HostRef for NameTokenHostRef"],["impl HostRef for RegistrarHostRef"],["impl HostRef for DefaultResolverHostRef"],["impl HostRef for ResolverHostRef"],["impl HostRef for ReverseResolverHostRef"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1884]} \ No newline at end of file diff --git a/docs/trait.impl/odra_core/host/trait.InitArgs.js b/docs/trait.impl/odra_core/host/trait.InitArgs.js index 8af0875..80838fd 100644 --- a/docs/trait.impl/odra_core/host/trait.InitArgs.js +++ b/docs/trait.impl/odra_core/host/trait.InitArgs.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl InitArgs for ControllerInitArgs"],["impl InitArgs for SecondaryMarketInitArgs"],["impl InitArgs for NameTokenInitArgs"],["impl InitArgs for RegistrarInitArgs"],["impl InitArgs for DefaultResolverInitArgs"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl InitArgs for ControllerInitArgs"],["impl InitArgs for SecondaryMarketInitArgs"],["impl InitArgs for NameTokenInitArgs"],["impl InitArgs for RegistrarInitArgs"],["impl InitArgs for DefaultResolverInitArgs"],["impl InitArgs for ReverseResolverInitArgs"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1454]} \ No newline at end of file diff --git a/docs/trait.impl/odra_core/module/trait.Module.js b/docs/trait.impl/odra_core/module/trait.Module.js index c2e5385..044273e 100644 --- a/docs/trait.impl/odra_core/module/trait.Module.js +++ b/docs/trait.impl/odra_core/module/trait.Module.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl Module for BaseController"],["impl Module for Controller"],["impl Module for SecondaryMarket"],["impl Module for NameToken"],["impl Module for Registrar"],["impl Module for DefaultResolver"],["impl Module for ReverseResolver"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl Module for BaseController"],["impl Module for Controller"],["impl Module for SecondaryMarket"],["impl Module for NameToken"],["impl Module for Registrar"],["impl Module for DefaultResolver"],["impl Module for ReverseResolver"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1514]} \ No newline at end of file diff --git a/docs/trait.impl/odra_schema/trait.SchemaCustomElement.js b/docs/trait.impl/odra_schema/trait.SchemaCustomElement.js index bd1bba7..8eb5eeb 100644 --- a/docs/trait.impl/odra_schema/trait.SchemaCustomElement.js +++ b/docs/trait.impl/odra_schema/trait.SchemaCustomElement.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl SchemaCustomElement for NameMintInfo"],["impl SchemaCustomElement for NameTransferInfo"],["impl SchemaCustomElement for PaymentInfo"],["impl SchemaCustomElement for PaymentVoucher"],["impl SchemaCustomElement for RenewalPaymentVoucher"],["impl SchemaCustomElement for RenewalVoucher"],["impl SchemaCustomElement for SecondarySaleVoucher"],["impl SchemaCustomElement for TokenRenewalInfo"],["impl SchemaCustomElement for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl SchemaCustomElement for NameMintInfo"],["impl SchemaCustomElement for NameTransferInfo"],["impl SchemaCustomElement for PaymentInfo"],["impl SchemaCustomElement for PaymentVoucher"],["impl SchemaCustomElement for RenewalPaymentVoucher"],["impl SchemaCustomElement for RenewalVoucher"],["impl SchemaCustomElement for SecondarySaleVoucher"],["impl SchemaCustomElement for TokenRenewalInfo"],["impl SchemaCustomElement for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[2040]} \ No newline at end of file diff --git a/docs/trait.impl/odra_schema/trait.SchemaCustomTypes.js b/docs/trait.impl/odra_schema/trait.SchemaCustomTypes.js index 0b593f9..027b802 100644 --- a/docs/trait.impl/odra_schema/trait.SchemaCustomTypes.js +++ b/docs/trait.impl/odra_schema/trait.SchemaCustomTypes.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl SchemaCustomTypes for BaseController"],["impl SchemaCustomTypes for Controller"],["impl SchemaCustomTypes for PaymentFulfilled"],["impl SchemaCustomTypes for SecondaryMarket"],["impl SchemaCustomTypes for NameToken"],["impl SchemaCustomTypes for Registrar"],["impl SchemaCustomTypes for DefaultResolver"],["impl SchemaCustomTypes for ResolutionChanged"],["impl SchemaCustomTypes for ResolutionCleared"],["impl SchemaCustomTypes for PrimaryNameChanged"],["impl SchemaCustomTypes for ReverseResolver"],["impl SchemaCustomTypes for NameMintInfo"],["impl SchemaCustomTypes for NameTransferInfo"],["impl SchemaCustomTypes for PaymentInfo"],["impl SchemaCustomTypes for PaymentVoucher"],["impl SchemaCustomTypes for RenewalPaymentVoucher"],["impl SchemaCustomTypes for RenewalVoucher"],["impl SchemaCustomTypes for SecondarySaleVoucher"],["impl SchemaCustomTypes for TokenRenewalInfo"],["impl SchemaCustomTypes for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl SchemaCustomTypes for BaseController"],["impl SchemaCustomTypes for Controller"],["impl SchemaCustomTypes for PaymentFulfilled"],["impl SchemaCustomTypes for SignerPublicKeyChanged"],["impl SchemaCustomTypes for TreasuryAddressChanged"],["impl SchemaCustomTypes for SecondaryMarket"],["impl SchemaCustomTypes for NameToken"],["impl SchemaCustomTypes for GracePeriodChanged"],["impl SchemaCustomTypes for Registrar"],["impl SchemaCustomTypes for DefaultResolver"],["impl SchemaCustomTypes for NameTokenAddressChanged"],["impl SchemaCustomTypes for ResolutionChanged"],["impl SchemaCustomTypes for ResolutionCleared"],["impl SchemaCustomTypes for PrimaryNameChanged"],["impl SchemaCustomTypes for ReverseResolver"],["impl SchemaCustomTypes for NameMintInfo"],["impl SchemaCustomTypes for NameTransferInfo"],["impl SchemaCustomTypes for PaymentInfo"],["impl SchemaCustomTypes for PaymentVoucher"],["impl SchemaCustomTypes for RenewalPaymentVoucher"],["impl SchemaCustomTypes for RenewalVoucher"],["impl SchemaCustomTypes for SecondarySaleVoucher"],["impl SchemaCustomTypes for TokenRenewalInfo"],["impl SchemaCustomTypes for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[5523]} \ No newline at end of file diff --git a/docs/trait.impl/odra_schema/trait.SchemaEntrypoints.js b/docs/trait.impl/odra_schema/trait.SchemaEntrypoints.js index bbd8cd3..0e2a1a2 100644 --- a/docs/trait.impl/odra_schema/trait.SchemaEntrypoints.js +++ b/docs/trait.impl/odra_schema/trait.SchemaEntrypoints.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl SchemaEntrypoints for BaseController"],["impl SchemaEntrypoints for Controller"],["impl SchemaEntrypoints for SecondaryMarket"],["impl SchemaEntrypoints for NameToken"],["impl SchemaEntrypoints for Registrar"],["impl SchemaEntrypoints for DefaultResolver"],["impl SchemaEntrypoints for ReverseResolver"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl SchemaEntrypoints for BaseController"],["impl SchemaEntrypoints for Controller"],["impl SchemaEntrypoints for SecondaryMarket"],["impl SchemaEntrypoints for NameToken"],["impl SchemaEntrypoints for Registrar"],["impl SchemaEntrypoints for DefaultResolver"],["impl SchemaEntrypoints for ReverseResolver"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1591]} \ No newline at end of file diff --git a/docs/trait.impl/odra_schema/trait.SchemaErrors.js b/docs/trait.impl/odra_schema/trait.SchemaErrors.js index d57a5f8..7cf72e5 100644 --- a/docs/trait.impl/odra_schema/trait.SchemaErrors.js +++ b/docs/trait.impl/odra_schema/trait.SchemaErrors.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl SchemaErrors for ControllerError"],["impl SchemaErrors for NameTokenError"],["impl SchemaErrors for RegistrarError"],["impl SchemaErrors for ResolverError"],["impl SchemaErrors for NameTokenError"],["impl SchemaErrors for BaseController"],["impl SchemaErrors for BaseControllerContractRef"],["impl SchemaErrors for Controller"],["impl SchemaErrors for ControllerContractRef"],["impl SchemaErrors for SecondaryMarket"],["impl SchemaErrors for SecondaryMarketContractRef"],["impl SchemaErrors for NameToken"],["impl SchemaErrors for NameTokenContractRef"],["impl SchemaErrors for Registrar"],["impl SchemaErrors for RegistrarContractRef"],["impl SchemaErrors for DefaultResolver"],["impl SchemaErrors for DefaultResolverContractRef"],["impl SchemaErrors for ResolverContractRef"],["impl SchemaErrors for ReverseResolver"],["impl SchemaErrors for ReverseResolverContractRef"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl SchemaErrors for ControllerError"],["impl SchemaErrors for NameTokenError"],["impl SchemaErrors for RegistrarError"],["impl SchemaErrors for ResolverError"],["impl SchemaErrors for NameTokenError"],["impl SchemaErrors for BaseController"],["impl SchemaErrors for BaseControllerContractRef"],["impl SchemaErrors for Controller"],["impl SchemaErrors for ControllerContractRef"],["impl SchemaErrors for SecondaryMarket"],["impl SchemaErrors for SecondaryMarketContractRef"],["impl SchemaErrors for NameToken"],["impl SchemaErrors for NameTokenContractRef"],["impl SchemaErrors for Registrar"],["impl SchemaErrors for RegistrarContractRef"],["impl SchemaErrors for DefaultResolver"],["impl SchemaErrors for DefaultResolverContractRef"],["impl SchemaErrors for ResolverContractRef"],["impl SchemaErrors for ReverseResolver"],["impl SchemaErrors for ReverseResolverContractRef"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[4612]} \ No newline at end of file diff --git a/docs/trait.impl/odra_schema/trait.SchemaEvents.js b/docs/trait.impl/odra_schema/trait.SchemaEvents.js index 952879c..48b6c18 100644 --- a/docs/trait.impl/odra_schema/trait.SchemaEvents.js +++ b/docs/trait.impl/odra_schema/trait.SchemaEvents.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl SchemaEvents for BaseController"],["impl SchemaEvents for BaseControllerContractRef"],["impl SchemaEvents for Controller"],["impl SchemaEvents for ControllerContractRef"],["impl SchemaEvents for SecondaryMarket"],["impl SchemaEvents for SecondaryMarketContractRef"],["impl SchemaEvents for NameToken"],["impl SchemaEvents for NameTokenContractRef"],["impl SchemaEvents for Registrar"],["impl SchemaEvents for RegistrarContractRef"],["impl SchemaEvents for DefaultResolver"],["impl SchemaEvents for DefaultResolverContractRef"],["impl SchemaEvents for ResolverContractRef"],["impl SchemaEvents for ReverseResolver"],["impl SchemaEvents for ReverseResolverContractRef"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl SchemaEvents for BaseController"],["impl SchemaEvents for BaseControllerContractRef"],["impl SchemaEvents for Controller"],["impl SchemaEvents for ControllerContractRef"],["impl SchemaEvents for SecondaryMarket"],["impl SchemaEvents for SecondaryMarketContractRef"],["impl SchemaEvents for NameToken"],["impl SchemaEvents for NameTokenContractRef"],["impl SchemaEvents for Registrar"],["impl SchemaEvents for RegistrarContractRef"],["impl SchemaEvents for DefaultResolver"],["impl SchemaEvents for DefaultResolverContractRef"],["impl SchemaEvents for ResolverContractRef"],["impl SchemaEvents for ReverseResolver"],["impl SchemaEvents for ReverseResolverContractRef"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[3549]} \ No newline at end of file diff --git a/docs/trait.impl/odra_schema/ty/trait.NamedCLTyped.js b/docs/trait.impl/odra_schema/ty/trait.NamedCLTyped.js index 04b8009..8c2c1c7 100644 --- a/docs/trait.impl/odra_schema/ty/trait.NamedCLTyped.js +++ b/docs/trait.impl/odra_schema/ty/trait.NamedCLTyped.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl NamedCLTyped for PaymentFulfilled"],["impl NamedCLTyped for ResolutionChanged"],["impl NamedCLTyped for ResolutionCleared"],["impl NamedCLTyped for PrimaryNameChanged"],["impl NamedCLTyped for NameMintInfo"],["impl NamedCLTyped for NameTransferInfo"],["impl NamedCLTyped for PaymentInfo"],["impl NamedCLTyped for PaymentVoucher"],["impl NamedCLTyped for RenewalPaymentVoucher"],["impl NamedCLTyped for RenewalVoucher"],["impl NamedCLTyped for SecondarySaleVoucher"],["impl NamedCLTyped for TokenRenewalInfo"],["impl NamedCLTyped for TokenizationVoucher"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl NamedCLTyped for PaymentFulfilled"],["impl NamedCLTyped for SignerPublicKeyChanged"],["impl NamedCLTyped for TreasuryAddressChanged"],["impl NamedCLTyped for GracePeriodChanged"],["impl NamedCLTyped for NameTokenAddressChanged"],["impl NamedCLTyped for ResolutionChanged"],["impl NamedCLTyped for ResolutionCleared"],["impl NamedCLTyped for PrimaryNameChanged"],["impl NamedCLTyped for NameMintInfo"],["impl NamedCLTyped for NameTransferInfo"],["impl NamedCLTyped for PaymentInfo"],["impl NamedCLTyped for PaymentVoucher"],["impl NamedCLTyped for RenewalPaymentVoucher"],["impl NamedCLTyped for RenewalVoucher"],["impl NamedCLTyped for SecondarySaleVoucher"],["impl NamedCLTyped for TokenRenewalInfo"],["impl NamedCLTyped for TokenizationVoucher"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[3874]} \ No newline at end of file diff --git a/docs/trait.impl/serde/de/trait.Deserialize.js b/docs/trait.impl/serde/de/trait.Deserialize.js index 690d06a..b882745 100644 --- a/docs/trait.impl/serde/de/trait.Deserialize.js +++ b/docs/trait.impl/serde/de/trait.Deserialize.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl<'de> Deserialize<'de> for NameTokenMetadata"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl<'de> Deserialize<'de> for NameTokenMetadata"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[401]} \ No newline at end of file diff --git a/docs/trait.impl/serde/ser/trait.Serialize.js b/docs/trait.impl/serde/ser/trait.Serialize.js index b00826a..8d319ec 100644 --- a/docs/trait.impl/serde/ser/trait.Serialize.js +++ b/docs/trait.impl/serde/ser/trait.Serialize.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"casper_name_contracts":[["impl Serialize for NameTokenMetadata"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl Serialize for NameTokenMetadata"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[375]} \ No newline at end of file From 87ba15280390b946785c98de50d5d699e513c94e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Zieli=C5=84ski?= Date: Mon, 30 Jun 2025 13:03:20 +0200 Subject: [PATCH 166/172] Add ReverseResolver to cli --- casper-name-cli/src/odra_cli.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/casper-name-cli/src/odra_cli.rs b/casper-name-cli/src/odra_cli.rs index 90c144e..51a02c8 100644 --- a/casper-name-cli/src/odra_cli.rs +++ b/casper-name-cli/src/odra_cli.rs @@ -1,5 +1,5 @@ use casper_name_contracts::contracts::{ - controller::Controller, marketplace::SecondaryMarket, name_token::NameToken, registrar::Registrar, resolver::DefaultResolver + controller::Controller, marketplace::SecondaryMarket, name_token::NameToken, registrar::Registrar, resolver::DefaultResolver, reverse_resolver::ReverseResolver }; use deploy::DeployScript; use odra_cli::OdraCli; @@ -17,6 +17,7 @@ pub fn cli() { .contract::() .contract::() .contract::() + .contract::() .scenario(SetConfigScript) .scenario(RegisterTokenScenario) .scenario(CalculateTokenHash) From 8ea7f62819626c597abc62692610d3cd48c40895 Mon Sep 17 00:00:00 2001 From: Volodymyr-Kuchinskyi Date: Wed, 2 Jul 2025 11:40:05 +0200 Subject: [PATCH 167/172] chore: Extend js client with asset_uri for name token image url --- client-js/examples/config.ts | 1 + client-js/examples/offchain_purchase.ts | 5 ++--- client-js/examples/onchain_purchase.ts | 5 ++--- client-js/examples/onchain_purchase_cspr_cloud.ts | 2 +- client-js/examples/set_primary_name.ts | 2 +- client-js/examples/set_resolution.ts | 2 +- client-js/src/types.ts | 8 ++++++-- 7 files changed, 14 insertions(+), 11 deletions(-) diff --git a/client-js/examples/config.ts b/client-js/examples/config.ts index cdfd3ba..62ea790 100644 --- a/client-js/examples/config.ts +++ b/client-js/examples/config.ts @@ -6,6 +6,7 @@ export const config = { defaultResolverContractPackageHash: process.env.DEFAULT_RESOLVER_CONTRACT_PACKAGE_HASH, reverseResolutionContractPackageHash: process.env.REVERSE_RESOLUTION_CONTRACT_PACKAGE_HASH, controllerContractPackageHash: process.env.CONTROLLER_CONTRACT_PACKAGE_HASH, + nameTokenURL: process.env.NAME_TOKEN_URL, networkName: process.env.NETWORK_NAME, nodeAddress: process.env.NODE_ADDRESS, }; diff --git a/client-js/examples/offchain_purchase.ts b/client-js/examples/offchain_purchase.ts index cb099bf..1c10e8b 100644 --- a/client-js/examples/offchain_purchase.ts +++ b/client-js/examples/offchain_purchase.ts @@ -22,11 +22,10 @@ const run = async () => { ); const expiration = new Date(); - expiration.setFullYear(expiration.getFullYear() + 1, expiration.getMonth(), expiration.getDate()); - console.log(expiration.toISOString()) + expiration.setFullYear(expiration.getFullYear() + 1, expiration.getMonth(), expiration.getDate() + 1); const nameMintInfos = [ - new NameMintInfo(config.mintingName, buyerKeypair.publicKey.accountHash().toHex(), expiration), + new NameMintInfo(config.mintingName, buyerKeypair.publicKey.accountHash().toPrefixedString(), expiration, config.nameTokenURL), ]; const registrarContract = new Registrar( diff --git a/client-js/examples/onchain_purchase.ts b/client-js/examples/onchain_purchase.ts index b18c2e3..99312fc 100644 --- a/client-js/examples/onchain_purchase.ts +++ b/client-js/examples/onchain_purchase.ts @@ -1,8 +1,7 @@ +import { HttpHandler, KeyAlgorithm, PrivateKey, RpcClient } from "casper-js-sdk"; import fs from "fs"; import { join } from "path"; -import { HttpHandler, KeyAlgorithm, PrivateKey, RpcClient } from "casper-js-sdk"; - import { Controller } from "../src/controller"; import { NameMintInfo, PaymentInfo, PaymentVoucher } from "../src/types"; import { config } from "./config"; @@ -28,7 +27,7 @@ const run = async () => { const voucher = new PaymentVoucher( new PaymentInfo(buyerKeypair.publicKey.accountHash().toPrefixedString(), "payment:1", 5000000000), - [new NameMintInfo(config.mintingName, buyerKeypair.publicKey.accountHash().toPrefixedString(), expiration)], + [new NameMintInfo(config.mintingName, buyerKeypair.publicKey.accountHash().toPrefixedString(), expiration, config.nameTokenURL)], expiration, ); diff --git a/client-js/examples/onchain_purchase_cspr_cloud.ts b/client-js/examples/onchain_purchase_cspr_cloud.ts index 667078e..bb4d248 100644 --- a/client-js/examples/onchain_purchase_cspr_cloud.ts +++ b/client-js/examples/onchain_purchase_cspr_cloud.ts @@ -53,7 +53,7 @@ const run = async () => { const voucher = new PaymentVoucher( new PaymentInfo(createVoucherResponseData.voucher.payment_info.buyer, createVoucherResponseData.voucher.payment_info.payment_id, createVoucherResponseData.voucher.payment_info.amount), - createVoucherResponseData.voucher.names.map(name => new NameMintInfo(name.label, name.owner, new Date(name.token_expiration))), + createVoucherResponseData.voucher.names.map(name => new NameMintInfo(name.label, name.owner, new Date(name.token_expiration), config.nameTokenURL)), new Date(createVoucherResponseData.voucher.voucher_expiration), ); diff --git a/client-js/examples/set_primary_name.ts b/client-js/examples/set_primary_name.ts index 6f19df9..0cbc925 100644 --- a/client-js/examples/set_primary_name.ts +++ b/client-js/examples/set_primary_name.ts @@ -19,7 +19,7 @@ const run = async () => { ); const transaction = reverseResolver.setPrimaryName( - config.mintingName, + `${config.mintingName}.cspr`, // 8 CSPR 8000000000, ownerKeypair.publicKey, diff --git a/client-js/examples/set_resolution.ts b/client-js/examples/set_resolution.ts index a41393e..8726a48 100644 --- a/client-js/examples/set_resolution.ts +++ b/client-js/examples/set_resolution.ts @@ -19,7 +19,7 @@ const run = async () => { ); const transaction = defaultResolver.setResolution( - config.mintingName, + `${config.mintingName}.cspr`, ownerKeypair.publicKey.accountHash().toPrefixedString(), // 5 CSPR 5000000000, diff --git a/client-js/src/types.ts b/client-js/src/types.ts index 1439cbd..f0a33b0 100644 --- a/client-js/src/types.ts +++ b/client-js/src/types.ts @@ -1,7 +1,8 @@ /* eslint-disable eslint-comments/disable-enable-pair */ /* eslint-disable max-classes-per-file */ -import { CLValue, Key, toBytesU32, toBytesU512, toBytesU64 } from 'casper-js-sdk'; +import { bytesToHex } from '@noble/hashes/utils'; +import { CLValue, Key, toBytesU32, toBytesU64,toBytesU512 } from 'casper-js-sdk'; export class PaymentInfo { constructor( @@ -28,16 +29,19 @@ export class NameMintInfo { public label: string, public owner: string, public tokenExpiration: Date, + public assetURI: string, ) {} toBytes(): Uint8Array { const labelBytes = CLValue.newCLString(this.label).bytes() const ownerBytes = CLValue.newCLKey(Key.newKey(this.owner)).bytes() const tokenExpirationBytes = toBytesU64(this.tokenExpiration.getTime()*1000) + const assetURIBytes = CLValue.newCLString(this.assetURI).bytes() const bytes = Array.from(labelBytes) .concat(Array.from(ownerBytes)) - .concat(Array.from(tokenExpirationBytes)); + .concat(Array.from(tokenExpirationBytes)) + .concat(Array.from(assetURIBytes)); return Uint8Array.from(bytes); } From 859c88faee656ce33c8992a9002748d4f5a8ae4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Pobiar=C5=BCyn?= Date: Wed, 2 Jul 2025 16:36:48 +0200 Subject: [PATCH 168/172] fix: correct variable naming in resolve function for clarity --- casper-name-contracts/src/contracts/registrar.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/casper-name-contracts/src/contracts/registrar.rs b/casper-name-contracts/src/contracts/registrar.rs index 02ad2fa..57a0511 100644 --- a/casper-name-contracts/src/contracts/registrar.rs +++ b/casper-name-contracts/src/contracts/registrar.rs @@ -91,12 +91,12 @@ impl Registrar { /// Try to resolve a full domain name to an address. pub fn resolve(&self, full_domain: String) -> Option
{ let token_name = utils::extract_token_name(&full_domain)?; - let token_hash = self.token_id(token_name); - if !self.name_token.is_token_valid(token_hash) { + let token_id = self.token_id(token_name); + if !self.name_token.is_token_valid(token_id) { return None; } - match self.name_token.resolver(token_hash) { + match self.name_token.resolver(token_id) { Some(address) => self.resolver(address).resolve(full_domain), None => None, } From 2eaaad129340dccb64cc5cb93b074bf4620847a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Pobiar=C5=BCyn?= Date: Wed, 9 Jul 2025 16:05:28 +0200 Subject: [PATCH 169/172] refactor: Update dependencies in Cargo.toml and improve code structure in CLI files --- Cargo.toml | 15 ++- casper-name-cli/src/odra_cli.rs | 3 +- casper-name-cli/src/odra_cli/deploy.rs | 43 +++---- casper-name-cli/src/odra_cli/scenario.rs | 150 ++++++++--------------- 4 files changed, 85 insertions(+), 126 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 91f397f..f9ffcbd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,14 +7,13 @@ members = [ resolver = "2" [workspace.dependencies] -odra = { git = "https://github.com/odradev/odra", branch = "release/2.1.0" } -odra-cli = { git = "https://github.com/odradev/odra", branch = "release/2.1.0" } -odra-modules = { git = "https://github.com/odradev/odra", branch = "release/2.1.0" } -odra-test = { git = "https://github.com/odradev/odra", branch = "release/2.1.0" } -odra-build = { git = "https://github.com/odradev/odra", branch = "release/2.1.0" } -odra-bdd = { git = "https://github.com/odradev/odra", branch = "release/2.1.0" } -odra-casper-livenet-env = { git = "https://github.com/odradev/odra", branch = "release/2.1.0" } - +odra = { version = "2.1.0" } +odra-cli = { version = "2.1.0" } +odra-modules = { version = "2.1.0" } +odra-test = { version = "2.1.0" } +odra-build = { version = "2.1.0" } +odra-bdd = { version = "2.1.0" } +odra-casper-livenet-env = { version = "2.1.0" } [profile.release] codegen-units = 1 diff --git a/casper-name-cli/src/odra_cli.rs b/casper-name-cli/src/odra_cli.rs index 51a02c8..7494353 100644 --- a/casper-name-cli/src/odra_cli.rs +++ b/casper-name-cli/src/odra_cli.rs @@ -1,5 +1,6 @@ use casper_name_contracts::contracts::{ - controller::Controller, marketplace::SecondaryMarket, name_token::NameToken, registrar::Registrar, resolver::DefaultResolver, reverse_resolver::ReverseResolver + controller::Controller, marketplace::SecondaryMarket, name_token::NameToken, + registrar::Registrar, resolver::DefaultResolver, reverse_resolver::ReverseResolver, }; use deploy::DeployScript; use odra_cli::OdraCli; diff --git a/casper-name-cli/src/odra_cli/deploy.rs b/casper-name-cli/src/odra_cli/deploy.rs index c4d1333..7190a15 100644 --- a/casper-name-cli/src/odra_cli/deploy.rs +++ b/casper-name-cli/src/odra_cli/deploy.rs @@ -6,8 +6,9 @@ use casper_name_contracts::contracts::{ resolver::{DefaultResolver, DefaultResolverInitArgs}, reverse_resolver::{ReverseResolver, ReverseResolverInitArgs}, }; -use odra::host::{Deployer, HostEnv}; +use odra::host::HostEnv; use odra::prelude::*; +use odra_cli::{deploy::Error, DeployedContractsContainer, DeployerExt}; pub struct DeployScript; @@ -15,68 +16,68 @@ impl odra_cli::deploy::DeployScript for DeployScript { fn deploy( &self, env: &HostEnv, - container: &mut odra_cli::DeployedContractsContainer, - ) -> Result<(), odra_cli::deploy::Error> { + container: &mut DeployedContractsContainer, + ) -> Result<(), Error> { let admin = env.get_account(0); - env.set_gas(500_000_000_000); - let token = NameToken::try_deploy( + let token = NameToken::load_or_deploy( &env, NameTokenInitArgs { name: "008_CN".to_string(), symbol: "008_CN".to_string(), max_supply: 1_000_000, }, + container, + 500_000_000_000, )?; - container.add_contract(&token)?; - env.set_gas(300_000_000_000); - let resolver = DefaultResolver::try_deploy( + _ = DefaultResolver::load_or_deploy( &env, DefaultResolverInitArgs { name_token: token.address(), }, + container, + 300_000_000_000, )?; - container.add_contract(&resolver)?; - env.set_gas(500_000_000_000); - let registrar = Registrar::try_deploy( + let registrar = Registrar::load_or_deploy( &env, RegistrarInitArgs { name_token: token.address(), }, + container, + 500_000_000_000, )?; - container.add_contract(®istrar)?; - env.set_gas(500_000_000_000); - let controller = Controller::try_deploy( + _ = Controller::load_or_deploy( &env, ControllerInitArgs { registrar: registrar.address(), treasury: admin, signer: env.public_key(&admin), }, + container, + 500_000_000_000, )?; - container.add_contract(&controller)?; - env.set_gas(500_000_000_000); - let market = SecondaryMarket::try_deploy( + _ = SecondaryMarket::load_or_deploy( &env, SecondaryMarketInitArgs { signer: env.public_key(&admin), treasury: admin, name_token: token.address(), }, + container, + 500_000_000_000, )?; - container.add_contract(&market)?; - env.set_gas(300_000_000_000); - let reverse_resolver = ReverseResolver::try_deploy( + _ = ReverseResolver::load_or_deploy( &env, ReverseResolverInitArgs { name_token: token.address(), }, + container, + 300_000_000_000, )?; - container.add_contract(&reverse_resolver)?; Ok(()) } diff --git a/casper-name-cli/src/odra_cli/scenario.rs b/casper-name-cli/src/odra_cli/scenario.rs index 9ef1929..c2a3ead 100644 --- a/casper-name-cli/src/odra_cli/scenario.rs +++ b/casper-name-cli/src/odra_cli/scenario.rs @@ -12,10 +12,15 @@ use casper_name_contracts::{ use odra::{ casper_types::{ bytesrepr::{Bytes, ToBytes}, - AsymmetricType, PublicKey, U512, + U512, }, + host::HostEnv, prelude::*, - schema::casper_contract_schema::NamedCLType + schema::casper_contract_schema::NamedCLType, +}; +use odra_cli::{ + scenario::{Args, Error as ScenarioError, Scenario, ScenarioMetadata}, + CommandArg, ContractProvider, DeployedContractsContainer, }; use odra_modules::access::DEFAULT_ADMIN_ROLE; use std::io::Write; @@ -26,25 +31,25 @@ const EXPIRATION: u64 = ONE_DAY * 365; pub struct SetConfigScript; -impl odra_cli::scenario::ScenarioMetadata for SetConfigScript { +impl ScenarioMetadata for SetConfigScript { const NAME: &'static str = "config"; const DESCRIPTION: &'static str = "Sets dependencies between contracts"; } -impl odra_cli::scenario::Scenario for SetConfigScript { +impl Scenario for SetConfigScript { fn run( &self, - env: &odra::host::HostEnv, - container: odra_cli::DeployedContractsContainer, - _args: odra_cli::scenario::Args, - ) -> Result<(), odra_cli::scenario::Error> { - let resolver_address = container.get_ref::(env)?.address(); - let controller_address = container.get_ref::(env)?.address(); - let marketplace_address = container.get_ref::(env)?.address(); - - let mut registrar = container.get_ref::(env)?; - let mut name_token = container.get_ref::(env)?; - let mut resolver = container.get_ref::(env)?; + env: &HostEnv, + container: &DeployedContractsContainer, + _args: Args, + ) -> Result<(), ScenarioError> { + let resolver_address = container.contract_ref::(env)?.address(); + let controller_address = container.contract_ref::(env)?.address(); + let marketplace_address = container.contract_ref::(env)?.address(); + + let mut registrar = container.contract_ref::(env)?; + let mut name_token = container.contract_ref::(env)?; + let mut resolver = container.contract_ref::(env)?; // Set default resolver. env.set_gas(20_000_000_000); @@ -75,18 +80,18 @@ impl odra_cli::scenario::Scenario for SetConfigScript { pub struct RegisterTokenScenario; -impl odra_cli::scenario::ScenarioMetadata for RegisterTokenScenario { +impl ScenarioMetadata for RegisterTokenScenario { const NAME: &'static str = "register-token"; const DESCRIPTION: &'static str = "Registers a token"; } -impl odra_cli::scenario::Scenario for RegisterTokenScenario { +impl Scenario for RegisterTokenScenario { fn run( &self, - env: &odra::host::HostEnv, - container: odra_cli::DeployedContractsContainer, - args: odra_cli::scenario::Args, - ) -> Result<(), odra_cli::scenario::Error> { + env: &HostEnv, + container: &DeployedContractsContainer, + args: Args, + ) -> Result<(), ScenarioError> { let owner = args.get_single::
("buyer")?; let token_validity = to_mills(args.get_single::("token_validity").ok()); @@ -102,28 +107,19 @@ impl odra_cli::scenario::Scenario for RegisterTokenScenario { env.set_gas(10_000_000_000); container - .get_ref::(env) - .unwrap() + .contract_ref::(env)? .controller_register(voucher); Ok(()) } - fn args(&self) -> Vec { + fn args(&self) -> Vec { vec![ - odra_cli::CommandArg::new("name", "Name to register", NamedCLType::String, true, false), - odra_cli::CommandArg::new( - "buyer", - "Address of the buyer", - NamedCLType::Key, - true, - false, - ), - odra_cli::CommandArg::new( + CommandArg::new("name", "Name to register", NamedCLType::String).required(), + CommandArg::new("buyer", "Address of the buyer", NamedCLType::Key).required(), + CommandArg::new( "token_validity", "Token validity in seconds", NamedCLType::U64, - false, - false, ), ] } @@ -137,48 +133,42 @@ fn to_mills(seconds: Option) -> Option { pub struct CalculateTokenHash; -impl odra_cli::scenario::ScenarioMetadata for CalculateTokenHash { +impl ScenarioMetadata for CalculateTokenHash { const NAME: &'static str = "token-hash"; const DESCRIPTION: &'static str = "Calculates the hash of a token"; } -impl odra_cli::scenario::Scenario for CalculateTokenHash { +impl Scenario for CalculateTokenHash { fn run( &self, - _env: &odra::host::HostEnv, - _container: odra_cli::DeployedContractsContainer, - args: odra_cli::scenario::Args, - ) -> Result<(), odra_cli::scenario::Error> { + _env: &HostEnv, + _container: &DeployedContractsContainer, + args: Args, + ) -> Result<(), ScenarioError> { let token_name = args.get_single::("token_name")?; prettycli::info(&blake2b(token_name)); Ok(()) } - fn args(&self) -> Vec { - vec![odra_cli::CommandArg::new( - "token_name", - "Name of the token", - NamedCLType::String, - true, - false, - )] + fn args(&self) -> Vec { + vec![CommandArg::new("token_name", "Name of the token", NamedCLType::String).required()] } } pub struct CalculateSignature; -impl odra_cli::scenario::ScenarioMetadata for CalculateSignature { +impl ScenarioMetadata for CalculateSignature { const NAME: &'static str = "signature"; const DESCRIPTION: &'static str = "Calculates the signature of a token"; } -impl odra_cli::scenario::Scenario for CalculateSignature { +impl Scenario for CalculateSignature { fn run( &self, - env: &odra::host::HostEnv, - _container: odra_cli::DeployedContractsContainer, - args: odra_cli::scenario::Args, - ) -> Result<(), odra_cli::scenario::Error> { + env: &HostEnv, + _container: &DeployedContractsContainer, + args: Args, + ) -> Result<(), ScenarioError> { let admin = env.get_account(0); let name = NameMintInfo { @@ -205,40 +195,16 @@ impl odra_cli::scenario::Scenario for CalculateSignature { Ok(()) } - fn args(&self) -> Vec { + fn args(&self) -> Vec { vec![ - odra_cli::CommandArg::new("voucher.payment.buyer", "", NamedCLType::Key, true, false), - odra_cli::CommandArg::new( - "voucher.payment.payment_id", - "", - NamedCLType::String, - true, - false, - ), - odra_cli::CommandArg::new("voucher.payment.amount", "", NamedCLType::U512, true, false), - odra_cli::CommandArg::new("voucher.names.label", "", NamedCLType::String, true, false), - odra_cli::CommandArg::new("voucher.names.owner", "", NamedCLType::Key, true, false), - odra_cli::CommandArg::new( - "voucher.names.token_expiration", - "", - NamedCLType::U64, - true, - false, - ), - odra_cli::CommandArg::new( - "voucher.voucher_expiration", - "", - NamedCLType::U64, - true, - false, - ), - odra_cli::CommandArg::new( - "voucher.names.asset_uri", - "", - NamedCLType::String, - true, - false, - ), + CommandArg::new("voucher.payment.buyer", "", NamedCLType::Key).required(), + CommandArg::new("voucher.payment.payment_id", "", NamedCLType::String).required(), + CommandArg::new("voucher.payment.amount", "", NamedCLType::U512).required(), + CommandArg::new("voucher.names.label", "", NamedCLType::String).required(), + CommandArg::new("voucher.names.owner", "", NamedCLType::Key).required(), + CommandArg::new("voucher.names.token_expiration", "", NamedCLType::U64).required(), + CommandArg::new("voucher.voucher_expiration", "", NamedCLType::U64).required(), + CommandArg::new("voucher.names.asset_uri", "", NamedCLType::String).required(), ] } } @@ -256,11 +222,3 @@ fn blake2b>(data: T) -> String { .expect("should copy hash to the result array"); hex::encode(result) } - -fn _parse_address(addr: &str) -> Address { - let public_key = PublicKey::from_hex(addr.as_bytes()); - match public_key { - Ok(public_key) => Address::from(public_key), - Err(_) => Address::from_str(addr).expect("Invalid address"), - } -} From 25c6ff0e9f494faca7804801a41f7d556d7eeb2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Pobiar=C5=BCyn?= Date: Wed, 9 Jul 2025 16:05:37 +0200 Subject: [PATCH 170/172] chore: Remove outdated deployed contracts files --- ...deployed_contracts.toml.2024-07-16T11:22:11Z | 9 --------- ...deployed_contracts.toml.2024-07-16T11:43:57Z | 17 ----------------- ...deployed_contracts.toml.2024-07-24T13:18:49Z | 17 ----------------- 3 files changed, 43 deletions(-) delete mode 100644 casper-name-cli/resources/deployed_contracts.toml.2024-07-16T11:22:11Z delete mode 100644 casper-name-cli/resources/deployed_contracts.toml.2024-07-16T11:43:57Z delete mode 100644 casper-name-cli/resources/deployed_contracts.toml.2024-07-24T13:18:49Z diff --git a/casper-name-cli/resources/deployed_contracts.toml.2024-07-16T11:22:11Z b/casper-name-cli/resources/deployed_contracts.toml.2024-07-16T11:22:11Z deleted file mode 100644 index 737f3ca..0000000 --- a/casper-name-cli/resources/deployed_contracts.toml.2024-07-16T11:22:11Z +++ /dev/null @@ -1,9 +0,0 @@ -time = "2024-07-16T11:22:11Z" - -[[contracts]] -name = "NameToken" -package_hash = "hash-a373778985b7a0b94b8af361567949999ea877ff61d772c0e56b549f5c959463" - -[[contracts]] -name = "Registrar" -package_hash = "hash-d47e6c572e958d7cc87c98a4b610d075959e70eba778d17b18c4dfc6fa617a51" diff --git a/casper-name-cli/resources/deployed_contracts.toml.2024-07-16T11:43:57Z b/casper-name-cli/resources/deployed_contracts.toml.2024-07-16T11:43:57Z deleted file mode 100644 index 1f4246f..0000000 --- a/casper-name-cli/resources/deployed_contracts.toml.2024-07-16T11:43:57Z +++ /dev/null @@ -1,17 +0,0 @@ -time = "2024-07-16T11:43:57Z" - -[[contracts]] -name = "NameToken" -package_hash = "hash-fc8ab6d9eb505dfbbafa206b8c0e1315f24f2e57679d3360845aa6a40c3b5616" - -[[contracts]] -name = "Registrar" -package_hash = "hash-7ea164bc01a4ccd5570828b01513d3e7c4af5eaa0b0553d62246b4bae667d536" - -[[contracts]] -name = "Controller" -package_hash = "hash-89657c76ff061dfff952ffbf02c1ce7d0fd8920d8c0726f069b05286c5c8a7a6" - -[[contracts]] -name = "DefaultResolver" -package_hash = "hash-b6ac9c03faf55d53b3fa01d61b8ff176621bda8db5b8a4d209ebba56a2db1555" diff --git a/casper-name-cli/resources/deployed_contracts.toml.2024-07-24T13:18:49Z b/casper-name-cli/resources/deployed_contracts.toml.2024-07-24T13:18:49Z deleted file mode 100644 index 780b72f..0000000 --- a/casper-name-cli/resources/deployed_contracts.toml.2024-07-24T13:18:49Z +++ /dev/null @@ -1,17 +0,0 @@ -time = "2024-07-24T13:18:49Z" - -[[contracts]] -name = "NameToken" -package_hash = "hash-3619b74a5975ebca1e5bb1512aeb774fb985aa19293c0a6a5454a0c31c47cb03" - -[[contracts]] -name = "Registrar" -package_hash = "hash-27fa25167d5a744ac7daf34ac0c8e1aba42574bef234cc54db2942dc5d6a7d6e" - -[[contracts]] -name = "Controller" -package_hash = "hash-44af251078f945d49e0d1cc7e2f4edd34e4eb82555c07f4b335e7f0ec256c772" - -[[contracts]] -name = "DefaultResolver" -package_hash = "hash-3f817f28c9ff1c0aef0d7b335c496df4321c4425fb4287c85ad9192bd41ce743" From 9bad54c728b0767b362d139e979345128d94e410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Pobiar=C5=BCyn?= Date: Wed, 9 Jul 2025 16:14:10 +0200 Subject: [PATCH 171/172] Update docs --- docs/.lock | 0 docs/casper_name_contracts/all.html | 2 +- .../controller/enum.ControllerError.html | 14 +- .../contracts/controller/index.html | 6 +- .../controller/struct.BaseController.html | 24 +- .../struct.BaseControllerContractRef.html | 16 +- .../struct.BaseControllerHostRef.html | 18 +- .../controller/struct.Controller.html | 28 +- .../struct.ControllerContractRef.html | 30 +- .../controller/struct.ControllerHostRef.html | 46 +- .../controller/struct.ControllerInitArgs.html | 18 +- .../controller/struct.PaymentFulfilled.html | 24 +- .../struct.SignerPublicKeyChanged.html | 24 +- .../struct.TreasuryAddressChanged.html | 22 +- .../contracts/index.html | 2 +- .../contracts/marketplace/index.html | 2 +- .../marketplace/struct.SecondaryMarket.html | 22 +- .../struct.SecondaryMarketContractRef.html | 24 +- .../struct.SecondaryMarketHostRef.html | 34 +- .../struct.SecondaryMarketInitArgs.html | 18 +- .../name_token/enum.NameTokenError.html | 14 +- .../contracts/name_token/index.html | 2 +- .../name_token/struct.NameToken.html | 42 +- .../struct.NameTokenContractRef.html | 42 +- .../name_token/struct.NameTokenHostRef.html | 80 +- .../name_token/struct.NameTokenInitArgs.html | 16 +- .../registrar/constant.CONTROLLER_ROLE.html | 2 +- .../registrar/enum.RegistrarError.html | 14 +- .../contracts/registrar/index.html | 2 +- .../registrar/struct.GracePeriodChanged.html | 22 +- .../contracts/registrar/struct.Registrar.html | 20 +- .../struct.RegistrarContractRef.html | 22 +- .../registrar/struct.RegistrarHostRef.html | 30 +- .../registrar/struct.RegistrarInitArgs.html | 16 +- .../resolver/enum.ResolverError.html | 14 +- .../contracts/resolver/index.html | 2 +- .../resolver/struct.DefaultResolver.html | 16 +- .../struct.DefaultResolverContractRef.html | 18 +- .../struct.DefaultResolverHostRef.html | 22 +- .../struct.DefaultResolverInitArgs.html | 16 +- .../struct.NameTokenAddressChanged.html | 22 +- .../resolver/struct.ResolutionChanged.html | 22 +- .../resolver/struct.ResolutionCleared.html | 24 +- .../resolver/struct.ResolverContractRef.html | 16 +- .../resolver/struct.ResolverHostRef.html | 22 +- .../contracts/reverse_resolver/index.html | 2 +- .../struct.PrimaryNameChanged.html | 22 +- .../struct.ReverseResolver.html | 14 +- .../struct.ReverseResolverContractRef.html | 16 +- .../struct.ReverseResolverHostRef.html | 18 +- .../struct.ReverseResolverInitArgs.html | 16 +- .../contracts/token_id/index.html | 2 +- .../contracts/token_id/trait.ToTokenId.html | 6 +- .../data_structures/enum.NameTokenError.html | 14 +- .../data_structures/index.html | 2 +- .../data_structures/struct.NameMintInfo.html | 26 +- .../struct.NameTokenMetadata.html | 22 +- .../struct.NameTransferInfo.html | 26 +- .../data_structures/struct.PaymentInfo.html | 28 +- .../struct.PaymentVoucher.html | 28 +- .../struct.RenewalPaymentVoucher.html | 28 +- .../struct.RenewalVoucher.html | 26 +- .../struct.SecondarySaleVoucher.html | 26 +- .../struct.TokenRenewalInfo.html | 28 +- .../struct.TokenizationVoucher.html | 26 +- .../trait.ExpirableVoucher.html | 2 +- .../data_structures/trait.Payment.html | 2 +- docs/casper_name_contracts/index.html | 2 +- docs/help.html | 2 +- docs/search-index.js | 4 +- docs/settings.html | 2 +- .../contracts/controller.rs.html | 1654 +++------ .../contracts/marketplace.rs.html | 244 +- .../contracts/mod.rs.html | 25 +- .../contracts/name_token.rs.html | 1975 ++++------- .../contracts/registrar.rs.html | 2992 ++++++----------- .../contracts/resolver.rs.html | 1420 +++----- .../contracts/reverse_resolver.rs.html | 805 ++--- .../contracts/token_id.rs.html | 49 +- .../contracts/utils.rs.html | 433 +-- .../data_structures.rs.html | 1156 +++---- docs/src/casper_name_contracts/lib.rs.html | 28 +- ...HT-eb44e4cf.txt => COPYRIGHT-7fb11f4e.txt} | 23 +- .../FiraMono-Medium-86f75c8c.woff2 | Bin 0 -> 64572 bytes .../FiraMono-Regular-87c26294.woff2 | Bin 0 -> 64868 bytes .../FiraSans-Italic-81dc35de.woff2 | Bin 0 -> 136300 bytes .../FiraSans-MediumItalic-ccf7e434.woff2 | Bin 0 -> 140588 bytes .../SourceSerif4-Semibold-457a13ac.ttf.woff2 | Bin 0 -> 80732 bytes docs/static.files/main-5f194d8c.js | 11 - docs/static.files/main-fd3af306.js | 11 + docs/static.files/noscript-32bb7600.css | 1 + docs/static.files/noscript-893ab5e7.css | 1 - docs/static.files/rustdoc-46132b98.css | 53 - docs/static.files/rustdoc-84e720fa.css | 59 + docs/static.files/scrape-examples-5e967b76.js | 1 + docs/static.files/scrape-examples-d508a8a9.js | 1 - docs/static.files/search-036cda7a.js | 6 - docs/static.files/search-f7877310.js | 6 + docs/static.files/settings-0f613d39.js | 17 - docs/static.files/settings-5514c975.js | 17 + docs/static.files/src-script-56102188.js | 1 - docs/static.files/src-script-63605ae7.js | 1 + docs/static.files/storage-4e99c027.js | 23 + docs/static.files/storage-59e33391.js | 23 - .../casper_types/bytesrepr/trait.FromBytes.js | 2 +- .../casper_types/bytesrepr/trait.ToBytes.js | 2 +- .../casper_types/cl_type/trait.CLTyped.js | 2 +- docs/trait.impl/core/convert/trait.Into.js | 2 +- .../core/marker/trait.UnsafeUnpin.js | 9 + 109 files changed, 4385 insertions(+), 7950 deletions(-) mode change 100755 => 100644 docs/.lock rename docs/static.files/{COPYRIGHT-eb44e4cf.txt => COPYRIGHT-7fb11f4e.txt} (65%) create mode 100644 docs/static.files/FiraMono-Medium-86f75c8c.woff2 create mode 100644 docs/static.files/FiraMono-Regular-87c26294.woff2 create mode 100644 docs/static.files/FiraSans-Italic-81dc35de.woff2 create mode 100644 docs/static.files/FiraSans-MediumItalic-ccf7e434.woff2 create mode 100644 docs/static.files/SourceSerif4-Semibold-457a13ac.ttf.woff2 delete mode 100644 docs/static.files/main-5f194d8c.js create mode 100644 docs/static.files/main-fd3af306.js create mode 100644 docs/static.files/noscript-32bb7600.css delete mode 100644 docs/static.files/noscript-893ab5e7.css delete mode 100644 docs/static.files/rustdoc-46132b98.css create mode 100644 docs/static.files/rustdoc-84e720fa.css create mode 100644 docs/static.files/scrape-examples-5e967b76.js delete mode 100644 docs/static.files/scrape-examples-d508a8a9.js delete mode 100644 docs/static.files/search-036cda7a.js create mode 100644 docs/static.files/search-f7877310.js delete mode 100644 docs/static.files/settings-0f613d39.js create mode 100644 docs/static.files/settings-5514c975.js delete mode 100644 docs/static.files/src-script-56102188.js create mode 100644 docs/static.files/src-script-63605ae7.js create mode 100644 docs/static.files/storage-4e99c027.js delete mode 100644 docs/static.files/storage-59e33391.js create mode 100644 docs/trait.impl/core/marker/trait.UnsafeUnpin.js diff --git a/docs/.lock b/docs/.lock old mode 100755 new mode 100644 diff --git a/docs/casper_name_contracts/all.html b/docs/casper_name_contracts/all.html index a41dec2..b3bef82 100644 --- a/docs/casper_name_contracts/all.html +++ b/docs/casper_name_contracts/all.html @@ -1 +1 @@ -List of all items in this crate

List of all items

Structs

Enums

Traits

Constants

\ No newline at end of file +List of all items in this crate

List of all items

Structs

Enums

Traits

Constants

\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/controller/enum.ControllerError.html b/docs/casper_name_contracts/contracts/controller/enum.ControllerError.html index 1768eba..3132d3d 100644 --- a/docs/casper_name_contracts/contracts/controller/enum.ControllerError.html +++ b/docs/casper_name_contracts/contracts/controller/enum.ControllerError.html @@ -1,4 +1,4 @@ -ControllerError in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Enum ControllerError

Source
pub enum ControllerError {
+ControllerError in casper_name_contracts::contracts::controller - Rust

Enum ControllerError

Source
pub enum ControllerError {
     InvalidSignature = 1_101,
     FeeCollectorNotSet = 1_102,
     RegistrarNotSet = 1_103,
@@ -10,11 +10,11 @@
 

Variants§

§

InvalidSignature = 1_101

§

FeeCollectorNotSet = 1_102

§

RegistrarNotSet = 1_103

§

BuyerMustBeCaller = 1_104

§

InsufficientPayment = 1_105

§

PaymentTooLarge = 1_106

§

ContractAddressExpected = 1_107

Trait Implementations§

Source§

impl From<ControllerError> for OdraError

Source§

fn from(error: ControllerError) -> Self

Converts to this type from the input type.
Source§

impl SchemaErrors for ControllerError

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -24,9 +24,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/controller/index.html b/docs/casper_name_contracts/contracts/controller/index.html index 3b14617..4779044 100644 --- a/docs/casper_name_contracts/contracts/controller/index.html +++ b/docs/casper_name_contracts/contracts/controller/index.html @@ -1,3 +1,3 @@ -casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts

Module controller

Source

Structs§

Enums§

\ No newline at end of file +casper_name_contracts::contracts::controller - Rust

Module controller

Source

Structs§

BaseController
Base for all controllers. It handles access control, treasury and signer +public key.
BaseControllerContractRef
BaseController Contract Ref.
BaseControllerHostRef
BaseController Host Ref.
Controller
Controller smart contract. It handles payments and talks to the Registrar +Contract.
ControllerContractRef
Controller Contract Ref.
ControllerHostRef
Controller Host Ref.
ControllerInitArgs
Controller contract constructor arguments.
PaymentFulfilled
Event with the payment information.
SignerPublicKeyChanged
Event emitted when the signer public key is changed.
TreasuryAddressChanged
Event emitted when the treasury address is changed.

Enums§

ControllerError
Controller errors.
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/controller/struct.BaseController.html b/docs/casper_name_contracts/contracts/controller/struct.BaseController.html index 1835555..0f8ac72 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.BaseController.html +++ b/docs/casper_name_contracts/contracts/controller/struct.BaseController.html @@ -1,21 +1,21 @@ -BaseController in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct BaseController

Source
pub struct BaseController { /* private fields */ }
Expand description

Base for all controllers. It handles access control, treasury and signer +BaseController in casper_name_contracts::contracts::controller - Rust

Struct BaseController

Source
pub struct BaseController { /* private fields */ }
Expand description

Base for all controllers. It handles access control, treasury and signer public key.

Implementations§

Source§

impl BaseController

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

Source

pub fn is_paused(&self) -> bool

Delegated. See self.pausable.is_paused() for details.

Source

pub fn require_not_paused(&self)

Delegated. See self.pausable.require_not_paused() for details.

-
Source§

impl BaseController

Source

pub fn init(&mut self, signer: PublicKey, treasury: Address)

Initializes the controller. +

Source§

impl BaseController

Source

pub fn init(&mut self, signer: PublicKey, treasury: Address)

Initializes the controller. It assigns the deployer as the admin.

Source

pub fn pause(&mut self)

Temporarily stops the contract.

Source

pub fn unpause(&mut self)

Returns to normal operation.

-
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Admin only. Sets the public key of the signer.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Admin only. Sets the public key of the signer.

Source

pub fn set_treasury(&mut self, treasury: Address)

Admin only. Sets the treasury address.

-
Source

pub fn signer_public_key(&self) -> PublicKey

Returns the public key of the signer.

-
Source

pub fn process_payment_voucher<P: Payment + ToBytes>( +

Source

pub fn signer_public_key(&self) -> PublicKey

Returns the public key of the signer.

+
Source

pub fn process_payment_voucher<P: Payment + ToBytes>( &self, voucher: &P, - signature: Bytes, + signature: Bytes, )

Validate the payment voucher and process the payment.

Trait Implementations§

Source§

impl HasEntrypoints for BaseController

Source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
Source§

impl HasEvents for BaseController

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl HasIdent for BaseController

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl Module for BaseController

Source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
Source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
Source§

impl OdraContract for BaseController

Source§

type HostRef = BaseControllerHostRef

The host reference type.
Source§

type ContractRef = BaseControllerContractRef

The contract reference type.
Source§

type InitArgs = NoArgs

The init args type.
Source§

impl SchemaCustomTypes for BaseController

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl SchemaEntrypoints for BaseController

Source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
Source§

impl SchemaErrors for BaseController

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for BaseController

Source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
Source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where @@ -37,12 +37,12 @@ init_args: <R as OdraContract>::InitArgs, cfg: T, ) -> Result<<R as OdraContract>::HostRef, OdraError>
where - T: OdraConfig,

Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: OdraConfig,
Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -55,9 +55,9 @@ otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where E: Into<OdraError>,

Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where - T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/controller/struct.BaseControllerContractRef.html b/docs/casper_name_contracts/contracts/controller/struct.BaseControllerContractRef.html index 1d1a1c5..54e65e2 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.BaseControllerContractRef.html +++ b/docs/casper_name_contracts/contracts/controller/struct.BaseControllerContractRef.html @@ -1,17 +1,17 @@ -BaseControllerContractRef in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct BaseControllerContractRef

Source
pub struct BaseControllerContractRef { /* private fields */ }
Expand description

BaseController Contract Ref.

+BaseControllerContractRef in casper_name_contracts::contracts::controller - Rust

Struct BaseControllerContractRef

Source
pub struct BaseControllerContractRef { /* private fields */ }
Expand description

BaseController Contract Ref.

Implementations§

Source§

impl BaseControllerContractRef

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

Source

pub fn is_paused(&self) -> bool

Delegated. See self.pausable.is_paused() for details.

Source

pub fn require_not_paused(&self)

Delegated. See self.pausable.require_not_paused() for details.

-

Trait Implementations§

Source§

impl ContractRef for BaseControllerContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for BaseControllerContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for BaseControllerContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl ContractRef for BaseControllerContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for BaseControllerContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for BaseControllerContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -21,9 +21,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/controller/struct.BaseControllerHostRef.html b/docs/casper_name_contracts/contracts/controller/struct.BaseControllerHostRef.html index 15e531f..22aec2b 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.BaseControllerHostRef.html +++ b/docs/casper_name_contracts/contracts/controller/struct.BaseControllerHostRef.html @@ -1,4 +1,4 @@ -BaseControllerHostRef in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct BaseControllerHostRef

Source
pub struct BaseControllerHostRef { /* private fields */ }
Expand description

BaseController Host Ref.

+BaseControllerHostRef in casper_name_contracts::contracts::controller - Rust

Struct BaseControllerHostRef

Source
pub struct BaseControllerHostRef { /* private fields */ }
Expand description

BaseController Host Ref.

Implementations§

Source§

impl BaseControllerHostRef

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

@@ -22,16 +22,16 @@ Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_require_not_paused(&self) -> OdraResult<()>

Delegated. See self.pausable.require_not_paused() for details. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

Source§

impl EntryPointsCallerProvider for BaseControllerHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for BaseControllerHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for BaseControllerHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where +

Trait Implementations§

Source§

impl EntryPointsCallerProvider for BaseControllerHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for BaseControllerHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for BaseControllerHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -41,9 +41,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/controller/struct.Controller.html b/docs/casper_name_contracts/contracts/controller/struct.Controller.html index b8f6283..459ace5 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.Controller.html +++ b/docs/casper_name_contracts/contracts/controller/struct.Controller.html @@ -1,23 +1,23 @@ -Controller in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct Controller

Source
pub struct Controller { /* private fields */ }
Expand description

Controller smart contract. It handles payments and talks to the Registrar +Controller in casper_name_contracts::contracts::controller - Rust

Struct Controller

Source
pub struct Controller { /* private fields */ }
Expand description

Controller smart contract. It handles payments and talks to the Registrar Contract.

-

Implementations§

Source§

impl Controller

Source

pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address)

Initializes the controller with the registrar contract address, the +

Implementations§

Source§

impl Controller

Source

pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address)

Initializes the controller with the registrar contract address, the signer public key and the treasury address.

-
Source

pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes)

Payable. Buys new name tokens.

-
Source

pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes)

Payable. Renews name tokens.

+
Source

pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes)

Payable. Buys new name tokens.

+
Source

pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes)

Payable. Renews name tokens.

Source

pub fn buy_and_renew( &mut self, payment_voucher: PaymentVoucher, - payment_signature: Bytes, + payment_signature: Bytes, renewal_voucher: RenewalPaymentVoucher, - renewal_signature: Bytes, + renewal_signature: Bytes, )

Payable. Buys new name tokens and renews existing ones.

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

-
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

Source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

-
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

+
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

Source

pub fn pause(&mut self)

Delegated. See self.controller.pause() for details.

Source

pub fn unpause(&mut self)

Delegated. See self.controller.unpause() for details.

Source

pub fn is_paused(&self) -> bool

Delegated. See self.controller.is_paused() for details.

@@ -41,12 +41,12 @@ init_args: <R as OdraContract>::InitArgs, cfg: T, ) -> Result<<R as OdraContract>::HostRef, OdraError>
where - T: OdraConfig,
Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: OdraConfig,
Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -59,9 +59,9 @@ otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where E: Into<OdraError>,

Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where - T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/controller/struct.ControllerContractRef.html b/docs/casper_name_contracts/contracts/controller/struct.ControllerContractRef.html index ce565cb..9e67be1 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.ControllerContractRef.html +++ b/docs/casper_name_contracts/contracts/controller/struct.ControllerContractRef.html @@ -1,33 +1,33 @@ -ControllerContractRef in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct ControllerContractRef

Source
pub struct ControllerContractRef { /* private fields */ }
Expand description

Controller Contract Ref.

-

Implementations§

Source§

impl ControllerContractRef

Source

pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address)

Initializes the controller with the registrar contract address, the +ControllerContractRef in casper_name_contracts::contracts::controller - Rust

Struct ControllerContractRef

Source
pub struct ControllerContractRef { /* private fields */ }
Expand description

Controller Contract Ref.

+

Implementations§

Source§

impl ControllerContractRef

Source

pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address)

Initializes the controller with the registrar contract address, the signer public key and the treasury address.

-
Source

pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes)

Payable. Buys new name tokens.

-
Source

pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes)

Payable. Renews name tokens.

+
Source

pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes)

Payable. Buys new name tokens.

+
Source

pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes)

Payable. Renews name tokens.

Source

pub fn buy_and_renew( &mut self, payment_voucher: PaymentVoucher, - payment_signature: Bytes, + payment_signature: Bytes, renewal_voucher: RenewalPaymentVoucher, - renewal_signature: Bytes, + renewal_signature: Bytes, )

Payable. Buys new name tokens and renews existing ones.

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

-
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

Source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

-
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

+
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

Source

pub fn pause(&mut self)

Delegated. See self.controller.pause() for details.

Source

pub fn unpause(&mut self)

Delegated. See self.controller.unpause() for details.

Source

pub fn is_paused(&self) -> bool

Delegated. See self.controller.is_paused() for details.

-

Trait Implementations§

Source§

impl ContractRef for ControllerContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for ControllerContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for ControllerContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl ContractRef for ControllerContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for ControllerContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for ControllerContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -37,9 +37,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/controller/struct.ControllerHostRef.html b/docs/casper_name_contracts/contracts/controller/struct.ControllerHostRef.html index dfe60d8..3854d51 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.ControllerHostRef.html +++ b/docs/casper_name_contracts/contracts/controller/struct.ControllerHostRef.html @@ -1,29 +1,29 @@ -ControllerHostRef in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct ControllerHostRef

Source
pub struct ControllerHostRef { /* private fields */ }
Expand description

Controller Host Ref.

-

Implementations§

Source§

impl ControllerHostRef

Source

pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address)

Initializes the controller with the registrar contract address, the +ControllerHostRef in casper_name_contracts::contracts::controller - Rust

Struct ControllerHostRef

Source
pub struct ControllerHostRef { /* private fields */ }
Expand description

Controller Host Ref.

+

Implementations§

Source§

impl ControllerHostRef

Source

pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address)

Initializes the controller with the registrar contract address, the signer public key and the treasury address.

-
Source

pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes)

Payable. Buys new name tokens.

-
Source

pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes)

Payable. Renews name tokens.

+
Source

pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes)

Payable. Buys new name tokens.

+
Source

pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes)

Payable. Renews name tokens.

Source

pub fn buy_and_renew( &mut self, payment_voucher: PaymentVoucher, - payment_signature: Bytes, + payment_signature: Bytes, renewal_voucher: RenewalPaymentVoucher, - renewal_signature: Bytes, + renewal_signature: Bytes, )

Payable. Buys new name tokens and renews existing ones.

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

-
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

Source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

-
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

+
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

Source

pub fn pause(&mut self)

Delegated. See self.controller.pause() for details.

Source

pub fn unpause(&mut self)

Delegated. See self.controller.unpause() for details.

Source

pub fn is_paused(&self) -> bool

Delegated. See self.controller.is_paused() for details.

Source§

impl ControllerHostRef

Source

pub fn try_init( &mut self, registrar: Address, - signer: PublicKey, + signer: PublicKey, treasury: Address, ) -> OdraResult<()>

Initializes the controller with the registrar contract address, the signer public key and the treasury address. @@ -31,21 +31,21 @@

Source

pub fn try_buy( &mut self, voucher: PaymentVoucher, - signature: Bytes, + signature: Bytes, ) -> OdraResult<()>

Payable. Buys new name tokens. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_renew( &mut self, voucher: RenewalPaymentVoucher, - signature: Bytes, + signature: Bytes, ) -> OdraResult<()>

Payable. Renews name tokens. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_buy_and_renew( &mut self, payment_voucher: PaymentVoucher, - payment_signature: Bytes, + payment_signature: Bytes, renewal_voucher: RenewalPaymentVoucher, - renewal_signature: Bytes, + renewal_signature: Bytes, ) -> OdraResult<()>

Payable. Buys new name tokens and renews existing ones. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Try to resolve a full domain name to an address. @@ -64,11 +64,11 @@ address: &Address, ) -> OdraResult<()>

Delegated. See self.controller.revoke_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_set_signer_public_key(&mut self, signer: PublicKey) -> OdraResult<()>

Delegated. See self.controller.set_signer_public_key() for details. +

Source

pub fn try_set_signer_public_key(&mut self, signer: PublicKey) -> OdraResult<()>

Delegated. See self.controller.set_signer_public_key() for details. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_set_treasury(&mut self, treasury: Address) -> OdraResult<()>

Delegated. See self.controller.set_treasury() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_signer_public_key(&self) -> OdraResult<PublicKey>

Delegated. See self.controller.signer_public_key() for details. +

Source

pub fn try_signer_public_key(&self) -> OdraResult<PublicKey>

Delegated. See self.controller.signer_public_key() for details. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_pause(&mut self) -> OdraResult<()>

Delegated. See self.controller.pause() for details. Does not fail in case of error, returns odra::OdraResult instead.

@@ -76,16 +76,16 @@ Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_is_paused(&self) -> OdraResult<bool>

Delegated. See self.controller.is_paused() for details. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

Source§

impl EntryPointsCallerProvider for ControllerHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for ControllerHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for ControllerHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where +

Trait Implementations§

Source§

impl EntryPointsCallerProvider for ControllerHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for ControllerHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for ControllerHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -95,9 +95,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/controller/struct.ControllerInitArgs.html b/docs/casper_name_contracts/contracts/controller/struct.ControllerInitArgs.html index 39b1f99..6c92696 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.ControllerInitArgs.html +++ b/docs/casper_name_contracts/contracts/controller/struct.ControllerInitArgs.html @@ -1,16 +1,16 @@ -ControllerInitArgs in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct ControllerInitArgs

Source
pub struct ControllerInitArgs {
+ControllerInitArgs in casper_name_contracts::contracts::controller - Rust

Struct ControllerInitArgs

Source
pub struct ControllerInitArgs {
     pub registrar: Address,
-    pub signer: PublicKey,
+    pub signer: PublicKey,
     pub treasury: Address,
 }
Expand description

Controller contract constructor arguments.

-

Fields§

§registrar: Address§signer: PublicKey§treasury: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for ControllerInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for ControllerInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Fields§

§registrar: Address§signer: PublicKey§treasury: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for ControllerInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for ControllerInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -20,9 +20,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/controller/struct.PaymentFulfilled.html b/docs/casper_name_contracts/contracts/controller/struct.PaymentFulfilled.html index 80b4709..23305dd 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.PaymentFulfilled.html +++ b/docs/casper_name_contracts/contracts/controller/struct.PaymentFulfilled.html @@ -1,18 +1,18 @@ -PaymentFulfilled in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct PaymentFulfilled

Source
pub struct PaymentFulfilled { /* private fields */ }
Expand description

Event with the payment information.

-

Implementations§

Source§

impl PaymentFulfilled

Source

pub fn new(payment_id: String, buyer: Address, amount: U512) -> Self

Creates a new instance of the PaymentFulfilled event.

-

Trait Implementations§

Source§

impl CLTyped for PaymentFulfilled

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for PaymentFulfilled

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for PaymentFulfilled

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for PaymentFulfilled

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for PaymentFulfilled

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PaymentFulfilled

Source§

fn eq(&self, other: &PaymentFulfilled) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for PaymentFulfilled

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PaymentFulfilled

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +PaymentFulfilled in casper_name_contracts::contracts::controller - Rust

Struct PaymentFulfilled

Source
pub struct PaymentFulfilled { /* private fields */ }
Expand description

Event with the payment information.

+

Implementations§

Source§

impl PaymentFulfilled

Source

pub fn new(payment_id: String, buyer: Address, amount: U512) -> Self

Creates a new instance of the PaymentFulfilled event.

+

Trait Implementations§

Source§

impl CLTyped for PaymentFulfilled

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for PaymentFulfilled

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for PaymentFulfilled

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for PaymentFulfilled

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for PaymentFulfilled

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PaymentFulfilled

Source§

fn eq(&self, other: &PaymentFulfilled) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for PaymentFulfilled

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PaymentFulfilled

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PaymentFulfilled

Source§

impl StructuralPartialEq for PaymentFulfilled

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PaymentFulfilled

Source§

impl StructuralPartialEq for PaymentFulfilled

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -23,9 +23,9 @@ if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/controller/struct.SignerPublicKeyChanged.html b/docs/casper_name_contracts/contracts/controller/struct.SignerPublicKeyChanged.html index 63ec37f..4b6bc4f 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.SignerPublicKeyChanged.html +++ b/docs/casper_name_contracts/contracts/controller/struct.SignerPublicKeyChanged.html @@ -1,18 +1,18 @@ -SignerPublicKeyChanged in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct SignerPublicKeyChanged

Source
pub struct SignerPublicKeyChanged { /* private fields */ }
Expand description

Event emitted when the signer public key is changed.

-

Implementations§

Source§

impl SignerPublicKeyChanged

Source

pub fn new(new_signer_public_key: PublicKey) -> Self

Creates a new instance of the SignerPublicKeyChanged event.

-

Trait Implementations§

Source§

impl CLTyped for SignerPublicKeyChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for SignerPublicKeyChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for SignerPublicKeyChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for SignerPublicKeyChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for SignerPublicKeyChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for SignerPublicKeyChanged

Source§

fn eq(&self, other: &SignerPublicKeyChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for SignerPublicKeyChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for SignerPublicKeyChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +SignerPublicKeyChanged in casper_name_contracts::contracts::controller - Rust

Struct SignerPublicKeyChanged

Source
pub struct SignerPublicKeyChanged { /* private fields */ }
Expand description

Event emitted when the signer public key is changed.

+

Implementations§

Source§

impl SignerPublicKeyChanged

Source

pub fn new(new_signer_public_key: PublicKey) -> Self

Creates a new instance of the SignerPublicKeyChanged event.

+

Trait Implementations§

Source§

impl CLTyped for SignerPublicKeyChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for SignerPublicKeyChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for SignerPublicKeyChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for SignerPublicKeyChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for SignerPublicKeyChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for SignerPublicKeyChanged

Source§

fn eq(&self, other: &SignerPublicKeyChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for SignerPublicKeyChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for SignerPublicKeyChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for SignerPublicKeyChanged

Source§

impl StructuralPartialEq for SignerPublicKeyChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for SignerPublicKeyChanged

Source§

impl StructuralPartialEq for SignerPublicKeyChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -23,9 +23,9 @@ if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/controller/struct.TreasuryAddressChanged.html b/docs/casper_name_contracts/contracts/controller/struct.TreasuryAddressChanged.html index 44c27c3..ccd949f 100644 --- a/docs/casper_name_contracts/contracts/controller/struct.TreasuryAddressChanged.html +++ b/docs/casper_name_contracts/contracts/controller/struct.TreasuryAddressChanged.html @@ -1,18 +1,18 @@ -TreasuryAddressChanged in casper_name_contracts::contracts::controller - Rust
casper_name_contracts::contracts::controller

Struct TreasuryAddressChanged

Source
pub struct TreasuryAddressChanged { /* private fields */ }
Expand description

Event emitted when the treasury address is changed.

+TreasuryAddressChanged in casper_name_contracts::contracts::controller - Rust

Struct TreasuryAddressChanged

Source
pub struct TreasuryAddressChanged { /* private fields */ }
Expand description

Event emitted when the treasury address is changed.

Implementations§

Source§

impl TreasuryAddressChanged

Source

pub fn new(new_treasury_address: Address) -> Self

Creates a new instance of the TreasuryAddressChanged event.

-

Trait Implementations§

Source§

impl CLTyped for TreasuryAddressChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for TreasuryAddressChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for TreasuryAddressChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for TreasuryAddressChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for TreasuryAddressChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for TreasuryAddressChanged

Source§

fn eq(&self, other: &TreasuryAddressChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for TreasuryAddressChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for TreasuryAddressChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Trait Implementations§

Source§

impl CLTyped for TreasuryAddressChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for TreasuryAddressChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for TreasuryAddressChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for TreasuryAddressChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for TreasuryAddressChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for TreasuryAddressChanged

Source§

fn eq(&self, other: &TreasuryAddressChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for TreasuryAddressChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for TreasuryAddressChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for TreasuryAddressChanged

Source§

impl StructuralPartialEq for TreasuryAddressChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for TreasuryAddressChanged

Source§

impl StructuralPartialEq for TreasuryAddressChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -23,9 +23,9 @@ if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/index.html b/docs/casper_name_contracts/contracts/index.html index e95f2c0..4ac4e38 100644 --- a/docs/casper_name_contracts/contracts/index.html +++ b/docs/casper_name_contracts/contracts/index.html @@ -1 +1 @@ -casper_name_contracts::contracts - Rust
\ No newline at end of file +casper_name_contracts::contracts - Rust
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/marketplace/index.html b/docs/casper_name_contracts/contracts/marketplace/index.html index 11927c9..b80e99d 100644 --- a/docs/casper_name_contracts/contracts/marketplace/index.html +++ b/docs/casper_name_contracts/contracts/marketplace/index.html @@ -1 +1 @@ -casper_name_contracts::contracts::marketplace - Rust
casper_name_contracts::contracts

Module marketplace

Source

Structs§

\ No newline at end of file +casper_name_contracts::contracts::marketplace - Rust

Module marketplace

Source

Structs§

SecondaryMarket
Secondary market smart contract. It handles the secondary market operations.
SecondaryMarketContractRef
SecondaryMarket Contract Ref.
SecondaryMarketHostRef
SecondaryMarket Host Ref.
SecondaryMarketInitArgs
SecondaryMarket contract constructor arguments.
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarket.html b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarket.html index 67282bd..cb08acc 100644 --- a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarket.html +++ b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarket.html @@ -1,18 +1,18 @@ -SecondaryMarket in casper_name_contracts::contracts::marketplace - Rust
casper_name_contracts::contracts::marketplace

Struct SecondaryMarket

Source
pub struct SecondaryMarket { /* private fields */ }
Expand description

Secondary market smart contract. It handles the secondary market operations.

+SecondaryMarket in casper_name_contracts::contracts::marketplace - Rust

Struct SecondaryMarket

Source
pub struct SecondaryMarket { /* private fields */ }
Expand description

Secondary market smart contract. It handles the secondary market operations.

Implementations§

Source§

impl SecondaryMarket

Source

pub fn init( &mut self, - signer: PublicKey, + signer: PublicKey, treasury: Address, name_token: Address, )

Initializes the secondary market with the signer public key, the treasury address and the name token contract address.

-
Source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

+
Source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

-
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

Source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

-
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

+
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

Source

pub fn pause(&mut self)

Delegated. See self.controller.pause() for details.

Source

pub fn unpause(&mut self)

Delegated. See self.controller.unpause() for details.

Source

pub fn is_paused(&self) -> bool

Delegated. See self.controller.is_paused() for details.

@@ -36,12 +36,12 @@ init_args: <R as OdraContract>::InitArgs, cfg: T, ) -> Result<<R as OdraContract>::HostRef, OdraError>
where - T: OdraConfig,
Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: OdraConfig,
Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -54,9 +54,9 @@ otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where E: Into<OdraError>,

Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where - T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketContractRef.html b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketContractRef.html index e9abdf4..6cc8f21 100644 --- a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketContractRef.html +++ b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketContractRef.html @@ -1,29 +1,29 @@ -SecondaryMarketContractRef in casper_name_contracts::contracts::marketplace - Rust
casper_name_contracts::contracts::marketplace

Struct SecondaryMarketContractRef

Source
pub struct SecondaryMarketContractRef { /* private fields */ }
Expand description

SecondaryMarket Contract Ref.

+SecondaryMarketContractRef in casper_name_contracts::contracts::marketplace - Rust

Struct SecondaryMarketContractRef

Source
pub struct SecondaryMarketContractRef { /* private fields */ }
Expand description

SecondaryMarket Contract Ref.

Implementations§

Source§

impl SecondaryMarketContractRef

Source

pub fn init( &mut self, - signer: PublicKey, + signer: PublicKey, treasury: Address, name_token: Address, )

Initializes the secondary market with the signer public key, the treasury address and the name token contract address.

-
Source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

+
Source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

-
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

Source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

-
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

+
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

Source

pub fn pause(&mut self)

Delegated. See self.controller.pause() for details.

Source

pub fn unpause(&mut self)

Delegated. See self.controller.unpause() for details.

Source

pub fn is_paused(&self) -> bool

Delegated. See self.controller.is_paused() for details.

-

Trait Implementations§

Source§

impl ContractRef for SecondaryMarketContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for SecondaryMarketContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for SecondaryMarketContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl ContractRef for SecondaryMarketContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for SecondaryMarketContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for SecondaryMarketContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -33,9 +33,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketHostRef.html b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketHostRef.html index 71ae4f8..e14d7e9 100644 --- a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketHostRef.html +++ b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketHostRef.html @@ -1,24 +1,24 @@ -SecondaryMarketHostRef in casper_name_contracts::contracts::marketplace - Rust
casper_name_contracts::contracts::marketplace

Struct SecondaryMarketHostRef

Source
pub struct SecondaryMarketHostRef { /* private fields */ }
Expand description

SecondaryMarket Host Ref.

+SecondaryMarketHostRef in casper_name_contracts::contracts::marketplace - Rust

Struct SecondaryMarketHostRef

Source
pub struct SecondaryMarketHostRef { /* private fields */ }
Expand description

SecondaryMarket Host Ref.

Implementations§

Source§

impl SecondaryMarketHostRef

Source

pub fn init( &mut self, - signer: PublicKey, + signer: PublicKey, treasury: Address, name_token: Address, )

Initializes the secondary market with the signer public key, the treasury address and the name token contract address.

-
Source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

+
Source

pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes)

Payable. Buys name tokens from the secondary market.

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.controller.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.controller.revoke_role() for details.

-
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

+
Source

pub fn set_signer_public_key(&mut self, signer: PublicKey)

Delegated. See self.controller.set_signer_public_key() for details.

Source

pub fn set_treasury(&mut self, treasury: Address)

Delegated. See self.controller.set_treasury() for details.

-
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

+
Source

pub fn signer_public_key(&self) -> PublicKey

Delegated. See self.controller.signer_public_key() for details.

Source

pub fn pause(&mut self)

Delegated. See self.controller.pause() for details.

Source

pub fn unpause(&mut self)

Delegated. See self.controller.unpause() for details.

Source

pub fn is_paused(&self) -> bool

Delegated. See self.controller.is_paused() for details.

Source§

impl SecondaryMarketHostRef

Source

pub fn try_init( &mut self, - signer: PublicKey, + signer: PublicKey, treasury: Address, name_token: Address, ) -> OdraResult<()>

Initializes the secondary market with the signer public key, the treasury @@ -27,7 +27,7 @@

Source

pub fn try_buy( &mut self, voucher: SecondarySaleVoucher, - signature: Bytes, + signature: Bytes, ) -> OdraResult<()>

Payable. Buys name tokens from the secondary market. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_has_role(&self, role: &Role, address: &Address) -> OdraResult<bool>

Delegated. See self.controller.has_role() for details. @@ -44,11 +44,11 @@ address: &Address, ) -> OdraResult<()>

Delegated. See self.controller.revoke_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_set_signer_public_key(&mut self, signer: PublicKey) -> OdraResult<()>

Delegated. See self.controller.set_signer_public_key() for details. +

Source

pub fn try_set_signer_public_key(&mut self, signer: PublicKey) -> OdraResult<()>

Delegated. See self.controller.set_signer_public_key() for details. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_set_treasury(&mut self, treasury: Address) -> OdraResult<()>

Delegated. See self.controller.set_treasury() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_signer_public_key(&self) -> OdraResult<PublicKey>

Delegated. See self.controller.signer_public_key() for details. +

Source

pub fn try_signer_public_key(&self) -> OdraResult<PublicKey>

Delegated. See self.controller.signer_public_key() for details. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_pause(&mut self) -> OdraResult<()>

Delegated. See self.controller.pause() for details. Does not fail in case of error, returns odra::OdraResult instead.

@@ -56,16 +56,16 @@ Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_is_paused(&self) -> OdraResult<bool>

Delegated. See self.controller.is_paused() for details. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

Source§

impl EntryPointsCallerProvider for SecondaryMarketHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for SecondaryMarketHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for SecondaryMarketHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where +

Trait Implementations§

Source§

impl EntryPointsCallerProvider for SecondaryMarketHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for SecondaryMarketHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for SecondaryMarketHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -75,9 +75,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketInitArgs.html b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketInitArgs.html index 53b6268..b6561f7 100644 --- a/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketInitArgs.html +++ b/docs/casper_name_contracts/contracts/marketplace/struct.SecondaryMarketInitArgs.html @@ -1,16 +1,16 @@ -SecondaryMarketInitArgs in casper_name_contracts::contracts::marketplace - Rust
casper_name_contracts::contracts::marketplace

Struct SecondaryMarketInitArgs

Source
pub struct SecondaryMarketInitArgs {
-    pub signer: PublicKey,
+SecondaryMarketInitArgs in casper_name_contracts::contracts::marketplace - Rust

Struct SecondaryMarketInitArgs

Source
pub struct SecondaryMarketInitArgs {
+    pub signer: PublicKey,
     pub treasury: Address,
     pub name_token: Address,
 }
Expand description

SecondaryMarket contract constructor arguments.

-

Fields§

§signer: PublicKey§treasury: Address§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for SecondaryMarketInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for SecondaryMarketInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Fields§

§signer: PublicKey§treasury: Address§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for SecondaryMarketInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for SecondaryMarketInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -20,9 +20,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/name_token/enum.NameTokenError.html b/docs/casper_name_contracts/contracts/name_token/enum.NameTokenError.html index f6402c6..83be84e 100644 --- a/docs/casper_name_contracts/contracts/name_token/enum.NameTokenError.html +++ b/docs/casper_name_contracts/contracts/name_token/enum.NameTokenError.html @@ -1,4 +1,4 @@ -NameTokenError in casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts::name_token

Enum NameTokenError

Source
pub enum NameTokenError {
+NameTokenError in casper_name_contracts::contracts::name_token - Rust

Enum NameTokenError

Source
pub enum NameTokenError {
     NotWhitelisted = 1_301,
     InvalidTokenOwner = 1_302,
     ExpiredTokenTransfer = 1_303,
@@ -9,11 +9,11 @@
 }

Variants§

§

NotWhitelisted = 1_301

§

InvalidTokenOwner = 1_302

§

ExpiredTokenTransfer = 1_303

§

InvalidTokenIdentifier = 1_304

§

InvalidResolver = 1_305

§

TokenSupplyDepleted = 1_306

§

WhitelistedAlready = 1_307

Trait Implementations§

Source§

impl From<NameTokenError> for OdraError

Source§

fn from(error: NameTokenError) -> Self

Converts to this type from the input type.
Source§

impl SchemaErrors for NameTokenError

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -23,9 +23,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/name_token/index.html b/docs/casper_name_contracts/contracts/name_token/index.html index 4899b58..d9729ac 100644 --- a/docs/casper_name_contracts/contracts/name_token/index.html +++ b/docs/casper_name_contracts/contracts/name_token/index.html @@ -1 +1 @@ -casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts

Module name_token

Source

Structs§

Enums§

\ No newline at end of file +casper_name_contracts::contracts::name_token - Rust

Module name_token

Source

Structs§

NameToken
NameToken contract. It is a CEP95 token with additional functionalities.
NameTokenContractRef
NameToken Contract Ref.
NameTokenHostRef
NameToken Host Ref.
NameTokenInitArgs
NameToken contract constructor arguments.

Enums§

NameTokenError
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/name_token/struct.NameToken.html b/docs/casper_name_contracts/contracts/name_token/struct.NameToken.html index e98794e..c3589c1 100644 --- a/docs/casper_name_contracts/contracts/name_token/struct.NameToken.html +++ b/docs/casper_name_contracts/contracts/name_token/struct.NameToken.html @@ -1,40 +1,40 @@ -NameToken in casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts::name_token

Struct NameToken

Source
pub struct NameToken { /* private fields */ }
Expand description

NameToken contract. It is a CEP95 token with additional functionalities.

+NameToken in casper_name_contracts::contracts::name_token - Rust

Struct NameToken

Source
pub struct NameToken { /* private fields */ }
Expand description

NameToken contract. It is a CEP95 token with additional functionalities.

Implementations§

Source§

impl NameToken

Source

pub fn init(&mut self, name: String, symbol: String, max_supply: u64)

Initializes CEP95 with the given name and symbol.

-
Source

pub fn token_exists(&self, token_id: U256) -> bool

Source

pub fn mint( +

Source

pub fn token_exists(&self, token_id: U256) -> bool

Source

pub fn mint( &mut self, recipient: Address, - token_id: U256, + token_id: U256, token_metadata: Vec<(String, String)>, -)

Source

pub fn burn(&mut self, token_id: U256)

Source

pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>)

Source

pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256)

Source

pub fn set_token_metadata( +)

Source

pub fn burn(&mut self, token_id: U256)

Source

pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>)

Source

pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256)

Source

pub fn set_token_metadata( &mut self, - token_id: U256, + token_id: U256, token_metadata: Vec<(String, String)>, -)

Source

pub fn resolver(&self, token_id: U256) -> Option<Address>

Source

pub fn set_resolver(&mut self, token_id: U256, resolver: Address)

Source

pub fn assert_is_owner(&self, token_id: U256, address: Address)

Source

pub fn is_token_valid(&self, token_id: U256) -> bool

Source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

+)
Source

pub fn resolver(&self, token_id: U256) -> Option<Address>

Source

pub fn set_resolver(&mut self, token_id: U256, resolver: Address)

Source

pub fn assert_is_owner(&self, token_id: U256, address: Address)

Source

pub fn is_token_valid(&self, token_id: U256) -> bool

Source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

Source

pub fn get_default_resolver(&self) -> Address

Get the default resolver.

Source

pub fn whitelist(&mut self, address: Address)

Source

pub fn revoke_whitelist(&mut self, address: Address)

Source

pub fn name(&self) -> String

Delegated. See self.token.name() for details.

Source

pub fn symbol(&self) -> String

Delegated. See self.token.symbol() for details.

-
Source

pub fn balance_of(&self, owner: Address) -> U256

Delegated. See self.token.balance_of() for details.

-
Source

pub fn owner_of(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.owner_of() for details.

+
Source

pub fn balance_of(&self, owner: Address) -> U256

Delegated. See self.token.balance_of() for details.

+
Source

pub fn owner_of(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.owner_of() for details.

Source

pub fn safe_transfer_from( &mut self, from: Address, to: Address, - token_id: U256, - data: Option<Bytes>, + token_id: U256, + data: Option<Bytes>, )

Delegated. See self.token.safe_transfer_from() for details.

-
Source

pub fn approve(&mut self, spender: Address, token_id: U256)

Delegated. See self.token.approve() for details.

-
Source

pub fn revoke_approval(&mut self, token_id: U256)

Delegated. See self.token.revoke_approval() for details.

-
Source

pub fn approved_for(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.approved_for() for details.

+
Source

pub fn approve(&mut self, spender: Address, token_id: U256)

Delegated. See self.token.approve() for details.

+
Source

pub fn revoke_approval(&mut self, token_id: U256)

Delegated. See self.token.revoke_approval() for details.

+
Source

pub fn approved_for(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.approved_for() for details.

Source

pub fn approve_for_all(&mut self, operator: Address)

Delegated. See self.token.approve_for_all() for details.

Source

pub fn revoke_approval_for_all(&mut self, operator: Address)

Delegated. See self.token.revoke_approval_for_all() for details.

Source

pub fn is_approved_for_all(&self, owner: Address, operator: Address) -> bool

Delegated. See self.token.is_approved_for_all() for details.

-
Source

pub fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>

Delegated. See self.token.token_metadata() for details.

+
Source

pub fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>

Delegated. See self.token.token_metadata() for details.

Source

pub fn get_owner(&self) -> Address

Delegated. See self.ownable.get_owner() for details.

Source

pub fn get_pending_owner(&self) -> Option<Address>

Delegated. See self.ownable.get_pending_owner() for details.

Source

pub fn transfer_ownership(&mut self, new_owner: &Address)

Delegated. See self.ownable.transfer_ownership() for details.

Source

pub fn accept_ownership(&mut self)

Delegated. See self.ownable.accept_ownership() for details.

Source

pub fn renounce_ownership(&mut self)

Delegated. See self.ownable.renounce_ownership() for details.

-
Source§

impl NameToken

Source

pub fn wrapped_metadata(&self, token_id: U256) -> NameTokenMetadata

Trait Implementations§

Source§

impl HasEntrypoints for NameToken

Source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
Source§

impl HasEvents for NameToken

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl HasIdent for NameToken

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl Module for NameToken

Source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
Source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
Source§

impl OdraContract for NameToken

Source§

type HostRef = NameTokenHostRef

The host reference type.
Source§

type ContractRef = NameTokenContractRef

The contract reference type.
Source§

type InitArgs = NameTokenInitArgs

The init args type.
Source§

impl SchemaCustomTypes for NameToken

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl SchemaEntrypoints for NameToken

Source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
Source§

impl SchemaErrors for NameToken

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for NameToken

Source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
Source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Source§

impl NameToken

Source

pub fn wrapped_metadata(&self, token_id: U256) -> NameTokenMetadata

Trait Implementations§

Source§

impl HasEntrypoints for NameToken

Source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
Source§

impl HasEvents for NameToken

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl HasIdent for NameToken

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl Module for NameToken

Source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
Source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
Source§

impl OdraContract for NameToken

Source§

type HostRef = NameTokenHostRef

The host reference type.
Source§

type ContractRef = NameTokenContractRef

The contract reference type.
Source§

type InitArgs = NameTokenInitArgs

The init args type.
Source§

impl SchemaCustomTypes for NameToken

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl SchemaEntrypoints for NameToken

Source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
Source§

impl SchemaErrors for NameToken

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for NameToken

Source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
Source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<R> Deployer<R> for R
where @@ -54,12 +54,12 @@ init_args: <R as OdraContract>::InitArgs, cfg: T, ) -> Result<<R as OdraContract>::HostRef, OdraError>
where - T: OdraConfig,

Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: OdraConfig,
Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -72,9 +72,9 @@ otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where E: Into<OdraError>,

Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where - T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenContractRef.html b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenContractRef.html index 6bb832a..573341c 100644 --- a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenContractRef.html +++ b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenContractRef.html @@ -1,47 +1,47 @@ -NameTokenContractRef in casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts::name_token

Struct NameTokenContractRef

Source
pub struct NameTokenContractRef { /* private fields */ }
Expand description

NameToken Contract Ref.

+NameTokenContractRef in casper_name_contracts::contracts::name_token - Rust

Struct NameTokenContractRef

Source
pub struct NameTokenContractRef { /* private fields */ }
Expand description

NameToken Contract Ref.

Implementations§

Source§

impl NameTokenContractRef

Source

pub fn init(&mut self, name: String, symbol: String, max_supply: u64)

Initializes CEP95 with the given name and symbol.

-
Source

pub fn token_exists(&self, token_id: U256) -> bool

Source

pub fn mint( +

Source

pub fn token_exists(&self, token_id: U256) -> bool

Source

pub fn mint( &mut self, recipient: Address, - token_id: U256, + token_id: U256, token_metadata: Vec<(String, String)>, -)

Source

pub fn burn(&mut self, token_id: U256)

Source

pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>)

Source

pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256)

Source

pub fn set_token_metadata( +)

Source

pub fn burn(&mut self, token_id: U256)

Source

pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>)

Source

pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256)

Source

pub fn set_token_metadata( &mut self, - token_id: U256, + token_id: U256, token_metadata: Vec<(String, String)>, -)

Source

pub fn resolver(&self, token_id: U256) -> Option<Address>

Source

pub fn set_resolver(&mut self, token_id: U256, resolver: Address)

Source

pub fn assert_is_owner(&self, token_id: U256, address: Address)

Source

pub fn is_token_valid(&self, token_id: U256) -> bool

Source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

+)
Source

pub fn resolver(&self, token_id: U256) -> Option<Address>

Source

pub fn set_resolver(&mut self, token_id: U256, resolver: Address)

Source

pub fn assert_is_owner(&self, token_id: U256, address: Address)

Source

pub fn is_token_valid(&self, token_id: U256) -> bool

Source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

Source

pub fn get_default_resolver(&self) -> Address

Get the default resolver.

Source

pub fn whitelist(&mut self, address: Address)

Source

pub fn revoke_whitelist(&mut self, address: Address)

Source

pub fn name(&self) -> String

Delegated. See self.token.name() for details.

Source

pub fn symbol(&self) -> String

Delegated. See self.token.symbol() for details.

-
Source

pub fn balance_of(&self, owner: Address) -> U256

Delegated. See self.token.balance_of() for details.

-
Source

pub fn owner_of(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.owner_of() for details.

+
Source

pub fn balance_of(&self, owner: Address) -> U256

Delegated. See self.token.balance_of() for details.

+
Source

pub fn owner_of(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.owner_of() for details.

Source

pub fn safe_transfer_from( &mut self, from: Address, to: Address, - token_id: U256, - data: Option<Bytes>, + token_id: U256, + data: Option<Bytes>, )

Delegated. See self.token.safe_transfer_from() for details.

-
Source

pub fn approve(&mut self, spender: Address, token_id: U256)

Delegated. See self.token.approve() for details.

-
Source

pub fn revoke_approval(&mut self, token_id: U256)

Delegated. See self.token.revoke_approval() for details.

-
Source

pub fn approved_for(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.approved_for() for details.

+
Source

pub fn approve(&mut self, spender: Address, token_id: U256)

Delegated. See self.token.approve() for details.

+
Source

pub fn revoke_approval(&mut self, token_id: U256)

Delegated. See self.token.revoke_approval() for details.

+
Source

pub fn approved_for(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.approved_for() for details.

Source

pub fn approve_for_all(&mut self, operator: Address)

Delegated. See self.token.approve_for_all() for details.

Source

pub fn revoke_approval_for_all(&mut self, operator: Address)

Delegated. See self.token.revoke_approval_for_all() for details.

Source

pub fn is_approved_for_all(&self, owner: Address, operator: Address) -> bool

Delegated. See self.token.is_approved_for_all() for details.

-
Source

pub fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>

Delegated. See self.token.token_metadata() for details.

+
Source

pub fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>

Delegated. See self.token.token_metadata() for details.

Source

pub fn get_owner(&self) -> Address

Delegated. See self.ownable.get_owner() for details.

Source

pub fn get_pending_owner(&self) -> Option<Address>

Delegated. See self.ownable.get_pending_owner() for details.

Source

pub fn transfer_ownership(&mut self, new_owner: &Address)

Delegated. See self.ownable.transfer_ownership() for details.

Source

pub fn accept_ownership(&mut self)

Delegated. See self.ownable.accept_ownership() for details.

Source

pub fn renounce_ownership(&mut self)

Delegated. See self.ownable.renounce_ownership() for details.

-

Trait Implementations§

Source§

impl ContractRef for NameTokenContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for NameTokenContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for NameTokenContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl ContractRef for NameTokenContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for NameTokenContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for NameTokenContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -51,9 +51,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenHostRef.html b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenHostRef.html index 66c9f7d..db2c769 100644 --- a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenHostRef.html +++ b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenHostRef.html @@ -1,34 +1,34 @@ -NameTokenHostRef in casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts::name_token

Struct NameTokenHostRef

Source
pub struct NameTokenHostRef { /* private fields */ }
Expand description

NameToken Host Ref.

+NameTokenHostRef in casper_name_contracts::contracts::name_token - Rust

Struct NameTokenHostRef

Source
pub struct NameTokenHostRef { /* private fields */ }
Expand description

NameToken Host Ref.

Implementations§

Source§

impl NameTokenHostRef

Source

pub fn init(&mut self, name: String, symbol: String, max_supply: u64)

Initializes CEP95 with the given name and symbol.

-
Source

pub fn token_exists(&self, token_id: U256) -> bool

Source

pub fn mint( +

Source

pub fn token_exists(&self, token_id: U256) -> bool

Source

pub fn mint( &mut self, recipient: Address, - token_id: U256, + token_id: U256, token_metadata: Vec<(String, String)>, -)

Source

pub fn burn(&mut self, token_id: U256)

Source

pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>)

Source

pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256)

Source

pub fn set_token_metadata( +)

Source

pub fn burn(&mut self, token_id: U256)

Source

pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>)

Source

pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256)

Source

pub fn set_token_metadata( &mut self, - token_id: U256, + token_id: U256, token_metadata: Vec<(String, String)>, -)

Source

pub fn resolver(&self, token_id: U256) -> Option<Address>

Source

pub fn set_resolver(&mut self, token_id: U256, resolver: Address)

Source

pub fn assert_is_owner(&self, token_id: U256, address: Address)

Source

pub fn is_token_valid(&self, token_id: U256) -> bool

Source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

+)
Source

pub fn resolver(&self, token_id: U256) -> Option<Address>

Source

pub fn set_resolver(&mut self, token_id: U256, resolver: Address)

Source

pub fn assert_is_owner(&self, token_id: U256, address: Address)

Source

pub fn is_token_valid(&self, token_id: U256) -> bool

Source

pub fn set_default_resolver(&mut self, resolver: Address)

Only admin. Set the default resolver.

Source

pub fn get_default_resolver(&self) -> Address

Get the default resolver.

Source

pub fn whitelist(&mut self, address: Address)

Source

pub fn revoke_whitelist(&mut self, address: Address)

Source

pub fn name(&self) -> String

Delegated. See self.token.name() for details.

Source

pub fn symbol(&self) -> String

Delegated. See self.token.symbol() for details.

-
Source

pub fn balance_of(&self, owner: Address) -> U256

Delegated. See self.token.balance_of() for details.

-
Source

pub fn owner_of(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.owner_of() for details.

+
Source

pub fn balance_of(&self, owner: Address) -> U256

Delegated. See self.token.balance_of() for details.

+
Source

pub fn owner_of(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.owner_of() for details.

Source

pub fn safe_transfer_from( &mut self, from: Address, to: Address, - token_id: U256, - data: Option<Bytes>, + token_id: U256, + data: Option<Bytes>, )

Delegated. See self.token.safe_transfer_from() for details.

-
Source

pub fn approve(&mut self, spender: Address, token_id: U256)

Delegated. See self.token.approve() for details.

-
Source

pub fn revoke_approval(&mut self, token_id: U256)

Delegated. See self.token.revoke_approval() for details.

-
Source

pub fn approved_for(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.approved_for() for details.

+
Source

pub fn approve(&mut self, spender: Address, token_id: U256)

Delegated. See self.token.approve() for details.

+
Source

pub fn revoke_approval(&mut self, token_id: U256)

Delegated. See self.token.revoke_approval() for details.

+
Source

pub fn approved_for(&self, token_id: U256) -> Option<Address>

Delegated. See self.token.approved_for() for details.

Source

pub fn approve_for_all(&mut self, operator: Address)

Delegated. See self.token.approve_for_all() for details.

Source

pub fn revoke_approval_for_all(&mut self, operator: Address)

Delegated. See self.token.revoke_approval_for_all() for details.

Source

pub fn is_approved_for_all(&self, owner: Address, operator: Address) -> bool

Delegated. See self.token.is_approved_for_all() for details.

-
Source

pub fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>

Delegated. See self.token.token_metadata() for details.

+
Source

pub fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>

Delegated. See self.token.token_metadata() for details.

Source

pub fn get_owner(&self) -> Address

Delegated. See self.ownable.get_owner() for details.

Source

pub fn get_pending_owner(&self) -> Option<Address>

Delegated. See self.ownable.get_pending_owner() for details.

Source

pub fn transfer_ownership(&mut self, new_owner: &Address)

Delegated. See self.ownable.transfer_ownership() for details.

@@ -41,42 +41,42 @@ max_supply: u64, ) -> OdraResult<()>

Initializes CEP95 with the given name and symbol. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_token_exists(&self, token_id: U256) -> OdraResult<bool>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_token_exists(&self, token_id: U256) -> OdraResult<bool>

Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_mint( &mut self, recipient: Address, - token_id: U256, + token_id: U256, token_metadata: Vec<(String, String)>, ) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_burn(&mut self, token_id: U256) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_burn(&mut self, token_id: U256) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_admin_transfer( &mut self, recipient: Address, - token_ids: Vec<U256>, + token_ids: Vec<U256>, ) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_transfer_from( &mut self, from: Address, to: Address, - token_id: U256, + token_id: U256, ) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_set_token_metadata( &mut self, - token_id: U256, + token_id: U256, token_metadata: Vec<(String, String)>, ) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_resolver(&self, token_id: U256) -> OdraResult<Option<Address>>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_resolver(&self, token_id: U256) -> OdraResult<Option<Address>>

Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_set_resolver( &mut self, - token_id: U256, + token_id: U256, resolver: Address, ) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_assert_is_owner( &self, - token_id: U256, + token_id: U256, address: Address, ) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_is_token_valid(&self, token_id: U256) -> OdraResult<bool>

Does not fail in case of error, returns odra::OdraResult instead.

+
Source

pub fn try_is_token_valid(&self, token_id: U256) -> OdraResult<bool>

Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_set_default_resolver(&mut self, resolver: Address) -> OdraResult<()>

Only admin. Set the default resolver. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_get_default_resolver(&self) -> OdraResult<Address>

Get the default resolver. @@ -87,27 +87,27 @@ Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_symbol(&self) -> OdraResult<String>

Delegated. See self.token.symbol() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_balance_of(&self, owner: Address) -> OdraResult<U256>

Delegated. See self.token.balance_of() for details. +

Source

pub fn try_balance_of(&self, owner: Address) -> OdraResult<U256>

Delegated. See self.token.balance_of() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_owner_of(&self, token_id: U256) -> OdraResult<Option<Address>>

Delegated. See self.token.owner_of() for details. +

Source

pub fn try_owner_of(&self, token_id: U256) -> OdraResult<Option<Address>>

Delegated. See self.token.owner_of() for details. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_safe_transfer_from( &mut self, from: Address, to: Address, - token_id: U256, - data: Option<Bytes>, + token_id: U256, + data: Option<Bytes>, ) -> OdraResult<()>

Delegated. See self.token.safe_transfer_from() for details. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_approve( &mut self, spender: Address, - token_id: U256, + token_id: U256, ) -> OdraResult<()>

Delegated. See self.token.approve() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_revoke_approval(&mut self, token_id: U256) -> OdraResult<()>

Delegated. See self.token.revoke_approval() for details. +

Source

pub fn try_revoke_approval(&mut self, token_id: U256) -> OdraResult<()>

Delegated. See self.token.revoke_approval() for details. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_approved_for(&self, token_id: U256) -> OdraResult<Option<Address>>

Delegated. See self.token.approved_for() for details. +

Source

pub fn try_approved_for(&self, token_id: U256) -> OdraResult<Option<Address>>

Delegated. See self.token.approved_for() for details. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_approve_for_all(&mut self, operator: Address) -> OdraResult<()>

Delegated. See self.token.approve_for_all() for details. Does not fail in case of error, returns odra::OdraResult instead.

@@ -124,7 +124,7 @@ Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_token_metadata( &self, - token_id: U256, + token_id: U256, ) -> OdraResult<Vec<(String, String)>>

Delegated. See self.token.token_metadata() for details. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_get_owner(&self) -> OdraResult<Address>

Delegated. See self.ownable.get_owner() for details. @@ -137,16 +137,16 @@ Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_renounce_ownership(&mut self) -> OdraResult<()>

Delegated. See self.ownable.renounce_ownership() for details. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

Source§

impl EntryPointsCallerProvider for NameTokenHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for NameTokenHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for NameTokenHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where +

Trait Implementations§

Source§

impl EntryPointsCallerProvider for NameTokenHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for NameTokenHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for NameTokenHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -156,9 +156,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenInitArgs.html b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenInitArgs.html index 012e35a..fbd98f4 100644 --- a/docs/casper_name_contracts/contracts/name_token/struct.NameTokenInitArgs.html +++ b/docs/casper_name_contracts/contracts/name_token/struct.NameTokenInitArgs.html @@ -1,16 +1,16 @@ -NameTokenInitArgs in casper_name_contracts::contracts::name_token - Rust
casper_name_contracts::contracts::name_token

Struct NameTokenInitArgs

Source
pub struct NameTokenInitArgs {
+NameTokenInitArgs in casper_name_contracts::contracts::name_token - Rust

Struct NameTokenInitArgs

Source
pub struct NameTokenInitArgs {
     pub name: String,
     pub symbol: String,
     pub max_supply: u64,
 }
Expand description

NameToken contract constructor arguments.

-

Fields§

§name: String§symbol: String§max_supply: u64

Trait Implementations§

Source§

impl Into<RuntimeArgs> for NameTokenInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for NameTokenInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Fields§

§name: String§symbol: String§max_supply: u64

Trait Implementations§

Source§

impl Into<RuntimeArgs> for NameTokenInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for NameTokenInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -20,9 +20,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/registrar/constant.CONTROLLER_ROLE.html b/docs/casper_name_contracts/contracts/registrar/constant.CONTROLLER_ROLE.html index 48859c2..994309a 100644 --- a/docs/casper_name_contracts/contracts/registrar/constant.CONTROLLER_ROLE.html +++ b/docs/casper_name_contracts/contracts/registrar/constant.CONTROLLER_ROLE.html @@ -1 +1 @@ -CONTROLLER_ROLE in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Constant CONTROLLER_ROLE

Source
pub const CONTROLLER_ROLE: Role;
\ No newline at end of file +CONTROLLER_ROLE in casper_name_contracts::contracts::registrar - Rust

Constant CONTROLLER_ROLE

Source
pub const CONTROLLER_ROLE: Role;
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/registrar/enum.RegistrarError.html b/docs/casper_name_contracts/contracts/registrar/enum.RegistrarError.html index 0ea8bea..79f2597 100644 --- a/docs/casper_name_contracts/contracts/registrar/enum.RegistrarError.html +++ b/docs/casper_name_contracts/contracts/registrar/enum.RegistrarError.html @@ -1,4 +1,4 @@ -RegistrarError in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Enum RegistrarError

Source
pub enum RegistrarError {
+RegistrarError in casper_name_contracts::contracts::registrar - Rust

Enum RegistrarError

Source
pub enum RegistrarError {
     ExpirationDateInThePast = 1_201,
     TokenNotExpired = 1_202,
     GracePeriodExpired = 1_203,
@@ -10,11 +10,11 @@
 }

Variants§

§

ExpirationDateInThePast = 1_201

§

TokenNotExpired = 1_202

§

GracePeriodExpired = 1_203

§

VoucherExpired = 1_204

§

TokenDoesNotExist = 1_205

§

GracePeriodTooLong = 1_206

§

NameTokenIsNotValid = 1_207

§

TokenNameIsNotValid = 1_208

Trait Implementations§

Source§

impl From<RegistrarError> for OdraError

Source§

fn from(error: RegistrarError) -> Self

Converts to this type from the input type.
Source§

impl SchemaErrors for RegistrarError

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -24,9 +24,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/registrar/index.html b/docs/casper_name_contracts/contracts/registrar/index.html index edb2b7a..f0e6223 100644 --- a/docs/casper_name_contracts/contracts/registrar/index.html +++ b/docs/casper_name_contracts/contracts/registrar/index.html @@ -1 +1 @@ -casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts

Module registrar

Source

Structs§

Enums§

Constants§

\ No newline at end of file +casper_name_contracts::contracts::registrar - Rust

Module registrar

Source

Structs§

GracePeriodChanged
Event emitted when the grace period is changed.
Registrar
Registrar smart contract. It handles the registration and expiration of name tokens.
RegistrarContractRef
Registrar Contract Ref.
RegistrarHostRef
Registrar Host Ref.
RegistrarInitArgs
Registrar contract constructor arguments.

Enums§

RegistrarError

Constants§

CONTROLLER_ROLE
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/registrar/struct.GracePeriodChanged.html b/docs/casper_name_contracts/contracts/registrar/struct.GracePeriodChanged.html index c020047..3ccf385 100644 --- a/docs/casper_name_contracts/contracts/registrar/struct.GracePeriodChanged.html +++ b/docs/casper_name_contracts/contracts/registrar/struct.GracePeriodChanged.html @@ -1,18 +1,18 @@ -GracePeriodChanged in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Struct GracePeriodChanged

Source
pub struct GracePeriodChanged { /* private fields */ }
Expand description

Event emitted when the grace period is changed.

+GracePeriodChanged in casper_name_contracts::contracts::registrar - Rust

Struct GracePeriodChanged

Source
pub struct GracePeriodChanged { /* private fields */ }
Expand description

Event emitted when the grace period is changed.

Implementations§

Source§

impl GracePeriodChanged

Source

pub fn new(new_grace_period: u64) -> Self

Creates a new instance of the GracePeriodChanged event.

-

Trait Implementations§

Source§

impl CLTyped for GracePeriodChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for GracePeriodChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for GracePeriodChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for GracePeriodChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for GracePeriodChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for GracePeriodChanged

Source§

fn eq(&self, other: &GracePeriodChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for GracePeriodChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for GracePeriodChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Trait Implementations§

Source§

impl CLTyped for GracePeriodChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for GracePeriodChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for GracePeriodChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for GracePeriodChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for GracePeriodChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for GracePeriodChanged

Source§

fn eq(&self, other: &GracePeriodChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for GracePeriodChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for GracePeriodChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for GracePeriodChanged

Source§

impl StructuralPartialEq for GracePeriodChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for GracePeriodChanged

Source§

impl StructuralPartialEq for GracePeriodChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -23,9 +23,9 @@ if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/registrar/struct.Registrar.html b/docs/casper_name_contracts/contracts/registrar/struct.Registrar.html index 80ed055..9a392fe 100644 --- a/docs/casper_name_contracts/contracts/registrar/struct.Registrar.html +++ b/docs/casper_name_contracts/contracts/registrar/struct.Registrar.html @@ -1,13 +1,13 @@ -Registrar in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Struct Registrar

Source
pub struct Registrar { /* private fields */ }
Expand description

Registrar smart contract. It handles the registration and expiration of name tokens.

+Registrar in casper_name_contracts::contracts::registrar - Rust

Struct Registrar

Source
pub struct Registrar { /* private fields */ }
Expand description

Registrar smart contract. It handles the registration and expiration of name tokens.

Implementations§

Source§

impl Registrar

Source

pub fn init(&mut self, name_token: Address)

Initializes the registrar with the name token contract address.

Source

pub fn pause(&mut self)

Temporarily stops the contract.

Source

pub fn unpause(&mut self)

Returns to normal operation.

Source

pub fn grace_period(&self) -> u64

Returns the grace period.

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

-
Source

pub fn expire(&mut self, token_ids: Vec<U256>)

Expire a list of tokens if they are expired.

+
Source

pub fn expire(&mut self, token_ids: Vec<U256>)

Expire a list of tokens if they are expired.

Source

pub fn set_grace_period(&mut self, period: u64)

Admin only. Sets the grace period.

-
Source

pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>)

Admin only. Transfer ownership of a list of tokens.

-
Source

pub fn admin_burn(&mut self, token_ids: Vec<U256>)

Admin only. Burn a list of tokens.

+
Source

pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>)

Admin only. Transfer ownership of a list of tokens.

+
Source

pub fn admin_burn(&mut self, token_ids: Vec<U256>)

Admin only. Burn a list of tokens.

Source

pub fn admin_prolong(&mut self, tokens: Vec<TokenRenewalInfo>)

Admin only. Prolong the expiration date of a list of tokens.

Source

pub fn admin_register(&mut self, names: Vec<NameMintInfo>)

Admin only. Register a list of tokens.

Source

pub fn admin_prolong_and_register( @@ -46,12 +46,12 @@ init_args: <R as OdraContract>::InitArgs, cfg: T, ) -> Result<<R as OdraContract>::HostRef, OdraError>
where - T: OdraConfig,

Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: OdraConfig,
Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -64,9 +64,9 @@ otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where E: Into<OdraError>,

Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where - T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarContractRef.html b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarContractRef.html index fc2bf60..1d41ff9 100644 --- a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarContractRef.html +++ b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarContractRef.html @@ -1,13 +1,13 @@ -RegistrarContractRef in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Struct RegistrarContractRef

Source
pub struct RegistrarContractRef { /* private fields */ }
Expand description

Registrar Contract Ref.

+RegistrarContractRef in casper_name_contracts::contracts::registrar - Rust

Struct RegistrarContractRef

Source
pub struct RegistrarContractRef { /* private fields */ }
Expand description

Registrar Contract Ref.

Implementations§

Source§

impl RegistrarContractRef

Source

pub fn init(&mut self, name_token: Address)

Initializes the registrar with the name token contract address.

Source

pub fn pause(&mut self)

Temporarily stops the contract.

Source

pub fn unpause(&mut self)

Returns to normal operation.

Source

pub fn grace_period(&self) -> u64

Returns the grace period.

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

-
Source

pub fn expire(&mut self, token_ids: Vec<U256>)

Expire a list of tokens if they are expired.

+
Source

pub fn expire(&mut self, token_ids: Vec<U256>)

Expire a list of tokens if they are expired.

Source

pub fn set_grace_period(&mut self, period: u64)

Admin only. Sets the grace period.

-
Source

pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>)

Admin only. Transfer ownership of a list of tokens.

-
Source

pub fn admin_burn(&mut self, token_ids: Vec<U256>)

Admin only. Burn a list of tokens.

+
Source

pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>)

Admin only. Transfer ownership of a list of tokens.

+
Source

pub fn admin_burn(&mut self, token_ids: Vec<U256>)

Admin only. Burn a list of tokens.

Source

pub fn admin_prolong(&mut self, tokens: Vec<TokenRenewalInfo>)

Admin only. Prolong the expiration date of a list of tokens.

Source

pub fn admin_register(&mut self, names: Vec<NameMintInfo>)

Admin only. Register a list of tokens.

Source

pub fn admin_prolong_and_register( @@ -26,14 +26,14 @@

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

Source

pub fn is_paused(&self) -> bool

Delegated. See self.pauseable.is_paused() for details.

-

Trait Implementations§

Source§

impl ContractRef for RegistrarContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for RegistrarContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for RegistrarContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl ContractRef for RegistrarContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for RegistrarContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for RegistrarContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -43,9 +43,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarHostRef.html b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarHostRef.html index ffcf9c5..1c1cd2e 100644 --- a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarHostRef.html +++ b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarHostRef.html @@ -1,13 +1,13 @@ -RegistrarHostRef in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Struct RegistrarHostRef

Source
pub struct RegistrarHostRef { /* private fields */ }
Expand description

Registrar Host Ref.

+RegistrarHostRef in casper_name_contracts::contracts::registrar - Rust

Struct RegistrarHostRef

Source
pub struct RegistrarHostRef { /* private fields */ }
Expand description

Registrar Host Ref.

Implementations§

Source§

impl RegistrarHostRef

Source

pub fn init(&mut self, name_token: Address)

Initializes the registrar with the name token contract address.

Source

pub fn pause(&mut self)

Temporarily stops the contract.

Source

pub fn unpause(&mut self)

Returns to normal operation.

Source

pub fn grace_period(&self) -> u64

Returns the grace period.

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Try to resolve a full domain name to an address.

-
Source

pub fn expire(&mut self, token_ids: Vec<U256>)

Expire a list of tokens if they are expired.

+
Source

pub fn expire(&mut self, token_ids: Vec<U256>)

Expire a list of tokens if they are expired.

Source

pub fn set_grace_period(&mut self, period: u64)

Admin only. Sets the grace period.

-
Source

pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>)

Admin only. Transfer ownership of a list of tokens.

-
Source

pub fn admin_burn(&mut self, token_ids: Vec<U256>)

Admin only. Burn a list of tokens.

+
Source

pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>)

Admin only. Transfer ownership of a list of tokens.

+
Source

pub fn admin_burn(&mut self, token_ids: Vec<U256>)

Admin only. Burn a list of tokens.

Source

pub fn admin_prolong(&mut self, tokens: Vec<TokenRenewalInfo>)

Admin only. Prolong the expiration date of a list of tokens.

Source

pub fn admin_register(&mut self, names: Vec<NameMintInfo>)

Admin only. Register a list of tokens.

Source

pub fn admin_prolong_and_register( @@ -36,17 +36,17 @@ Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Try to resolve a full domain name to an address. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_expire(&mut self, token_ids: Vec<U256>) -> OdraResult<()>

Expire a list of tokens if they are expired. +

Source

pub fn try_expire(&mut self, token_ids: Vec<U256>) -> OdraResult<()>

Expire a list of tokens if they are expired. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_set_grace_period(&mut self, period: u64) -> OdraResult<()>

Admin only. Sets the grace period. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_admin_transfer( &mut self, new_owner: Address, - token_ids: Vec<U256>, + token_ids: Vec<U256>, ) -> OdraResult<()>

Admin only. Transfer ownership of a list of tokens. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_admin_burn(&mut self, token_ids: Vec<U256>) -> OdraResult<()>

Admin only. Burn a list of tokens. +

Source

pub fn try_admin_burn(&mut self, token_ids: Vec<U256>) -> OdraResult<()>

Admin only. Burn a list of tokens. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_admin_prolong( &mut self, @@ -93,16 +93,16 @@ Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_is_paused(&self) -> OdraResult<bool>

Delegated. See self.pauseable.is_paused() for details. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

Source§

impl EntryPointsCallerProvider for RegistrarHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for RegistrarHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for RegistrarHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where +

Trait Implementations§

Source§

impl EntryPointsCallerProvider for RegistrarHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for RegistrarHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for RegistrarHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -112,9 +112,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarInitArgs.html b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarInitArgs.html index d0e3ae1..4a238b4 100644 --- a/docs/casper_name_contracts/contracts/registrar/struct.RegistrarInitArgs.html +++ b/docs/casper_name_contracts/contracts/registrar/struct.RegistrarInitArgs.html @@ -1,14 +1,14 @@ -RegistrarInitArgs in casper_name_contracts::contracts::registrar - Rust
casper_name_contracts::contracts::registrar

Struct RegistrarInitArgs

Source
pub struct RegistrarInitArgs {
+RegistrarInitArgs in casper_name_contracts::contracts::registrar - Rust

Struct RegistrarInitArgs

Source
pub struct RegistrarInitArgs {
     pub name_token: Address,
 }
Expand description

Registrar contract constructor arguments.

-

Fields§

§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for RegistrarInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for RegistrarInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Fields§

§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for RegistrarInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for RegistrarInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -18,9 +18,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/resolver/enum.ResolverError.html b/docs/casper_name_contracts/contracts/resolver/enum.ResolverError.html index 5df8e59..b40b2bb 100644 --- a/docs/casper_name_contracts/contracts/resolver/enum.ResolverError.html +++ b/docs/casper_name_contracts/contracts/resolver/enum.ResolverError.html @@ -1,4 +1,4 @@ -ResolverError in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Enum ResolverError

Source
pub enum ResolverError {
+ResolverError in casper_name_contracts::contracts::resolver - Rust

Enum ResolverError

Source
pub enum ResolverError {
     ResolutionSetWithInvalidToken = 1_401,
     ResolutionSetByInvalidOwner = 1_402,
     UnauthorizedInvalidation = 1_403,
@@ -9,11 +9,11 @@
 }

Variants§

§

ResolutionSetWithInvalidToken = 1_401

§

ResolutionSetByInvalidOwner = 1_402

§

UnauthorizedInvalidation = 1_403

§

UnauthorizedTokenAddressUpdate = 1_404

§

InvalidDomain = 1_405

§

InvalidSubdomainFormat = 1_406

§

InvalidTokenName = 1_407

Trait Implementations§

Source§

impl From<ResolverError> for OdraError

Source§

fn from(error: ResolverError) -> Self

Converts to this type from the input type.
Source§

impl SchemaErrors for ResolverError

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -23,9 +23,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/resolver/index.html b/docs/casper_name_contracts/contracts/resolver/index.html index df0bbd3..9c39256 100644 --- a/docs/casper_name_contracts/contracts/resolver/index.html +++ b/docs/casper_name_contracts/contracts/resolver/index.html @@ -1 +1 @@ -casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts

Module resolver

Source

Structs§

Enums§

\ No newline at end of file +casper_name_contracts::contracts::resolver - Rust

Module resolver

Source

Structs§

DefaultResolver
Default Resolver smart contract. It handles the resolution of domain names to addresses.
DefaultResolverContractRef
DefaultResolver Contract Ref.
DefaultResolverHostRef
DefaultResolver Host Ref.
DefaultResolverInitArgs
DefaultResolver contract constructor arguments.
NameTokenAddressChanged
Event emitted when the name token address is changed.
ResolutionChanged
Event emitted when a resolution is changed.
ResolutionCleared
Event emitted when a resolution is cleared.
ResolverContractRef
[Resolver] Contract Ref.
ResolverHostRef
[Resolver] Host Ref.

Enums§

ResolverError
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolver.html b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolver.html index 2baa098..f4616b5 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolver.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolver.html @@ -1,10 +1,10 @@ -DefaultResolver in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct DefaultResolver

Source
pub struct DefaultResolver { /* private fields */ }
Expand description

Default Resolver smart contract. It handles the resolution of domain names to addresses.

+DefaultResolver in casper_name_contracts::contracts::resolver - Rust

Struct DefaultResolver

Source
pub struct DefaultResolver { /* private fields */ }
Expand description

Default Resolver smart contract. It handles the resolution of domain names to addresses.

Implementations§

Source§

impl DefaultResolver

Source

pub fn init(&mut self, name_token: Address)

Initializes the default resolver with the name token contract address. The caller is granted the admin role.

Source

pub fn set_name_token(&mut self, name_token: Address)

Admin only. Sets the name token contract address.

Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Token owner only. Sets the resolution for a domain to an address.

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Resolves a domain to an address.

-
Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Invalidates all the resolutions for a token. Only the token owner or the admin can do this.

+
Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Invalidates all the resolutions for a token. Only the token owner or the admin can do this.

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

@@ -28,12 +28,12 @@ init_args: <R as OdraContract>::InitArgs, cfg: T, ) -> Result<<R as OdraContract>::HostRef, OdraError>
where - T: OdraConfig,
Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: OdraConfig,
Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -46,9 +46,9 @@ otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where E: Into<OdraError>,

Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where - T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverContractRef.html b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverContractRef.html index 3b7beb4..5fce9e3 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverContractRef.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverContractRef.html @@ -1,21 +1,21 @@ -DefaultResolverContractRef in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct DefaultResolverContractRef

Source
pub struct DefaultResolverContractRef { /* private fields */ }
Expand description

DefaultResolver Contract Ref.

+DefaultResolverContractRef in casper_name_contracts::contracts::resolver - Rust

Struct DefaultResolverContractRef

Source
pub struct DefaultResolverContractRef { /* private fields */ }
Expand description

DefaultResolver Contract Ref.

Implementations§

Source§

impl DefaultResolverContractRef

Source

pub fn init(&mut self, name_token: Address)

Initializes the default resolver with the name token contract address. The caller is granted the admin role.

Source

pub fn set_name_token(&mut self, name_token: Address)

Admin only. Sets the name token contract address.

Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Token owner only. Sets the resolution for a domain to an address.

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Resolves a domain to an address.

-
Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Invalidates all the resolutions for a token. Only the token owner or the admin can do this.

+
Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Invalidates all the resolutions for a token. Only the token owner or the admin can do this.

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

-

Trait Implementations§

Source§

impl ContractRef for DefaultResolverContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for DefaultResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for DefaultResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl ContractRef for DefaultResolverContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for DefaultResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for DefaultResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -25,9 +25,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverHostRef.html b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverHostRef.html index 28b0d7e..d2750e7 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverHostRef.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverHostRef.html @@ -1,10 +1,10 @@ -DefaultResolverHostRef in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct DefaultResolverHostRef

Source
pub struct DefaultResolverHostRef { /* private fields */ }
Expand description

DefaultResolver Host Ref.

+DefaultResolverHostRef in casper_name_contracts::contracts::resolver - Rust

Struct DefaultResolverHostRef

Source
pub struct DefaultResolverHostRef { /* private fields */ }
Expand description

DefaultResolver Host Ref.

Implementations§

Source§

impl DefaultResolverHostRef

Source

pub fn init(&mut self, name_token: Address)

Initializes the default resolver with the name token contract address. The caller is granted the admin role.

Source

pub fn set_name_token(&mut self, name_token: Address)

Admin only. Sets the name token contract address.

Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Token owner only. Sets the resolution for a domain to an address.

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Resolves a domain to an address.

-
Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Invalidates all the resolutions for a token. Only the token owner or the admin can do this.

+
Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Invalidates all the resolutions for a token. Only the token owner or the admin can do this.

Source

pub fn has_role(&self, role: &Role, address: &Address) -> bool

Delegated. See self.access_control.has_role() for details.

Source

pub fn grant_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.grant_role() for details.

Source

pub fn revoke_role(&mut self, role: &Role, address: &Address)

Delegated. See self.access_control.revoke_role() for details.

@@ -21,7 +21,7 @@ Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Resolves a domain to an address. Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_invalidate_resolutions(&mut self, token_id: U256) -> OdraResult<()>

Invalidates all the resolutions for a token. Only the token owner or the admin can do this. +

Source

pub fn try_invalidate_resolutions(&mut self, token_id: U256) -> OdraResult<()>

Invalidates all the resolutions for a token. Only the token owner or the admin can do this. Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_has_role(&self, role: &Role, address: &Address) -> OdraResult<bool>

Delegated. See self.access_control.has_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

@@ -37,16 +37,16 @@ address: &Address, ) -> OdraResult<()>

Delegated. See self.access_control.revoke_role() for details. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

Source§

impl EntryPointsCallerProvider for DefaultResolverHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for DefaultResolverHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for DefaultResolverHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where +

Trait Implementations§

Source§

impl EntryPointsCallerProvider for DefaultResolverHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for DefaultResolverHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for DefaultResolverHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -56,9 +56,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverInitArgs.html b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverInitArgs.html index 22641eb..612073e 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverInitArgs.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.DefaultResolverInitArgs.html @@ -1,14 +1,14 @@ -DefaultResolverInitArgs in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct DefaultResolverInitArgs

Source
pub struct DefaultResolverInitArgs {
+DefaultResolverInitArgs in casper_name_contracts::contracts::resolver - Rust

Struct DefaultResolverInitArgs

Source
pub struct DefaultResolverInitArgs {
     pub name_token: Address,
 }
Expand description

DefaultResolver contract constructor arguments.

-

Fields§

§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for DefaultResolverInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for DefaultResolverInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Fields§

§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for DefaultResolverInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for DefaultResolverInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -18,9 +18,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/resolver/struct.NameTokenAddressChanged.html b/docs/casper_name_contracts/contracts/resolver/struct.NameTokenAddressChanged.html index 73e3030..8bd3e8d 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.NameTokenAddressChanged.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.NameTokenAddressChanged.html @@ -1,18 +1,18 @@ -NameTokenAddressChanged in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct NameTokenAddressChanged

Source
pub struct NameTokenAddressChanged { /* private fields */ }
Expand description

Event emitted when the name token address is changed.

+NameTokenAddressChanged in casper_name_contracts::contracts::resolver - Rust

Struct NameTokenAddressChanged

Source
pub struct NameTokenAddressChanged { /* private fields */ }
Expand description

Event emitted when the name token address is changed.

Implementations§

Source§

impl NameTokenAddressChanged

Source

pub fn new(new_name_token: Address) -> Self

Creates a new instance of the NameTokenAddressChanged event.

-

Trait Implementations§

Source§

impl CLTyped for NameTokenAddressChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for NameTokenAddressChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for NameTokenAddressChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for NameTokenAddressChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for NameTokenAddressChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for NameTokenAddressChanged

Source§

fn eq(&self, other: &NameTokenAddressChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for NameTokenAddressChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for NameTokenAddressChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Trait Implementations§

Source§

impl CLTyped for NameTokenAddressChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for NameTokenAddressChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for NameTokenAddressChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for NameTokenAddressChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for NameTokenAddressChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for NameTokenAddressChanged

Source§

fn eq(&self, other: &NameTokenAddressChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for NameTokenAddressChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for NameTokenAddressChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for NameTokenAddressChanged

Source§

impl StructuralPartialEq for NameTokenAddressChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for NameTokenAddressChanged

Source§

impl StructuralPartialEq for NameTokenAddressChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -23,9 +23,9 @@ if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/resolver/struct.ResolutionChanged.html b/docs/casper_name_contracts/contracts/resolver/struct.ResolutionChanged.html index 773b46e..b1098c9 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.ResolutionChanged.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.ResolutionChanged.html @@ -1,18 +1,18 @@ -ResolutionChanged in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct ResolutionChanged

Source
pub struct ResolutionChanged { /* private fields */ }
Expand description

Event emitted when a resolution is changed.

+ResolutionChanged in casper_name_contracts::contracts::resolver - Rust

Struct ResolutionChanged

Source
pub struct ResolutionChanged { /* private fields */ }
Expand description

Event emitted when a resolution is changed.

Implementations§

Source§

impl ResolutionChanged

Source

pub fn new(full_domain: String, address: Option<Address>) -> Self

Creates a new instance of the ResolutionChanged event.

-

Trait Implementations§

Source§

impl CLTyped for ResolutionChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for ResolutionChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for ResolutionChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for ResolutionChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for ResolutionChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for ResolutionChanged

Source§

fn eq(&self, other: &ResolutionChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for ResolutionChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for ResolutionChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Trait Implementations§

Source§

impl CLTyped for ResolutionChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for ResolutionChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for ResolutionChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for ResolutionChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for ResolutionChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for ResolutionChanged

Source§

fn eq(&self, other: &ResolutionChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for ResolutionChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for ResolutionChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for ResolutionChanged

Source§

impl StructuralPartialEq for ResolutionChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for ResolutionChanged

Source§

impl StructuralPartialEq for ResolutionChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -23,9 +23,9 @@ if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/resolver/struct.ResolutionCleared.html b/docs/casper_name_contracts/contracts/resolver/struct.ResolutionCleared.html index 7a06989..357f4c5 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.ResolutionCleared.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.ResolutionCleared.html @@ -1,18 +1,18 @@ -ResolutionCleared in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct ResolutionCleared

Source
pub struct ResolutionCleared { /* private fields */ }
Expand description

Event emitted when a resolution is cleared.

-

Implementations§

Source§

impl ResolutionCleared

Source

pub fn new(token_id: U256) -> Self

Creates a new instance of the ResolutionCleared event.

-

Trait Implementations§

Source§

impl CLTyped for ResolutionCleared

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for ResolutionCleared

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for ResolutionCleared

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for ResolutionCleared

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for ResolutionCleared

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for ResolutionCleared

Source§

fn eq(&self, other: &ResolutionCleared) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for ResolutionCleared

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for ResolutionCleared

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +ResolutionCleared in casper_name_contracts::contracts::resolver - Rust

Struct ResolutionCleared

Source
pub struct ResolutionCleared { /* private fields */ }
Expand description

Event emitted when a resolution is cleared.

+

Implementations§

Source§

impl ResolutionCleared

Source

pub fn new(token_id: U256) -> Self

Creates a new instance of the ResolutionCleared event.

+

Trait Implementations§

Source§

impl CLTyped for ResolutionCleared

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for ResolutionCleared

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for ResolutionCleared

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for ResolutionCleared

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for ResolutionCleared

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for ResolutionCleared

Source§

fn eq(&self, other: &ResolutionCleared) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for ResolutionCleared

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for ResolutionCleared

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for ResolutionCleared

Source§

impl StructuralPartialEq for ResolutionCleared

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for ResolutionCleared

Source§

impl StructuralPartialEq for ResolutionCleared

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -23,9 +23,9 @@ if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/resolver/struct.ResolverContractRef.html b/docs/casper_name_contracts/contracts/resolver/struct.ResolverContractRef.html index 058a434..9ed7eb4 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.ResolverContractRef.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.ResolverContractRef.html @@ -1,12 +1,12 @@ -ResolverContractRef in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct ResolverContractRef

Source
pub struct ResolverContractRef { /* private fields */ }
Expand description

[Resolver] Contract Ref.

-

Implementations§

Source§

impl ResolverContractRef

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_name_token(&mut self, name_token: Address)

Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Trait Implementations§

Source§

impl ContractRef for ResolverContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for ResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for ResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +ResolverContractRef in casper_name_contracts::contracts::resolver - Rust

Struct ResolverContractRef

Source
pub struct ResolverContractRef { /* private fields */ }
Expand description

[Resolver] Contract Ref.

+

Implementations§

Source§

impl ResolverContractRef

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_name_token(&mut self, name_token: Address)

Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Trait Implementations§

Source§

impl ContractRef for ResolverContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for ResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for ResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -16,9 +16,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/resolver/struct.ResolverHostRef.html b/docs/casper_name_contracts/contracts/resolver/struct.ResolverHostRef.html index fc223a1..ba26815 100644 --- a/docs/casper_name_contracts/contracts/resolver/struct.ResolverHostRef.html +++ b/docs/casper_name_contracts/contracts/resolver/struct.ResolverHostRef.html @@ -1,5 +1,5 @@ -ResolverHostRef in casper_name_contracts::contracts::resolver - Rust
casper_name_contracts::contracts::resolver

Struct ResolverHostRef

Source
pub struct ResolverHostRef { /* private fields */ }
Expand description

[Resolver] Host Ref.

-

Implementations§

Source§

impl ResolverHostRef

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_name_token(&mut self, name_token: Address)

Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Source§

impl ResolverHostRef

Source

pub fn try_init(&mut self, name_token: Address) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+ResolverHostRef in casper_name_contracts::contracts::resolver - Rust

Struct ResolverHostRef

Source
pub struct ResolverHostRef { /* private fields */ }
Expand description

[Resolver] Host Ref.

+

Implementations§

Source§

impl ResolverHostRef

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_name_token(&mut self, name_token: Address)

Source

pub fn set_resolution(&mut self, full_domain: String, address: Option<Address>)

Source

pub fn resolve(&self, full_domain: String) -> Option<Address>

Source

pub fn invalidate_resolutions(&mut self, token_id: U256)

Source§

impl ResolverHostRef

Source

pub fn try_init(&mut self, name_token: Address) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_set_name_token(&mut self, name_token: Address) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_set_resolution( &mut self, @@ -7,17 +7,17 @@ address: Option<Address>, ) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

Source

pub fn try_resolve(&self, full_domain: String) -> OdraResult<Option<Address>>

Does not fail in case of error, returns odra::OdraResult instead.

-
Source

pub fn try_invalidate_resolutions(&mut self, token_id: U256) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

Source§

impl HostRef for ResolverHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where +

Source

pub fn try_invalidate_resolutions(&mut self, token_id: U256) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

+

Trait Implementations§

Source§

impl HostRef for ResolverHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -27,9 +27,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/index.html b/docs/casper_name_contracts/contracts/reverse_resolver/index.html index d203c77..efe55a2 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/index.html +++ b/docs/casper_name_contracts/contracts/reverse_resolver/index.html @@ -1 +1 @@ -casper_name_contracts::contracts::reverse_resolver - Rust
casper_name_contracts::contracts

Module reverse_resolver

Source

Structs§

\ No newline at end of file +casper_name_contracts::contracts::reverse_resolver - Rust

Module reverse_resolver

Source

Structs§

PrimaryNameChanged
Event emitted when the primary name of an address changes.
ReverseResolver
Reverse Resolver contract. It resolves primary names to addresses.
ReverseResolverContractRef
ReverseResolver Contract Ref.
ReverseResolverHostRef
ReverseResolver Host Ref.
ReverseResolverInitArgs
ReverseResolver contract constructor arguments.
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/struct.PrimaryNameChanged.html b/docs/casper_name_contracts/contracts/reverse_resolver/struct.PrimaryNameChanged.html index 4deacd9..091470d 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/struct.PrimaryNameChanged.html +++ b/docs/casper_name_contracts/contracts/reverse_resolver/struct.PrimaryNameChanged.html @@ -1,4 +1,4 @@ -PrimaryNameChanged in casper_name_contracts::contracts::reverse_resolver - Rust
casper_name_contracts::contracts::reverse_resolver

Struct PrimaryNameChanged

Source
pub struct PrimaryNameChanged {
+PrimaryNameChanged in casper_name_contracts::contracts::reverse_resolver - Rust

Struct PrimaryNameChanged

Source
pub struct PrimaryNameChanged {
     pub address: Address,
     pub old_primary_name: Option<String>,
     pub new_primary_name: Option<String>,
@@ -8,19 +8,19 @@
     old_primary_name: Option<String>,
     new_primary_name: Option<String>,
 ) -> Self

Creates a new instance of the PrimaryNameChanged event.

-

Trait Implementations§

Source§

impl CLTyped for PrimaryNameChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for PrimaryNameChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for PrimaryNameChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for PrimaryNameChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for PrimaryNameChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PrimaryNameChanged

Source§

fn eq(&self, other: &PrimaryNameChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for PrimaryNameChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PrimaryNameChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Trait Implementations§

Source§

impl CLTyped for PrimaryNameChanged

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Debug for PrimaryNameChanged

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EventInstance for PrimaryNameChanged

Source§

fn name() -> String

Returns the name of the event.
Source§

fn schema() -> Schema

Returns the Schema of the event.
Source§

impl FromBytes for PrimaryNameChanged

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl NamedCLTyped for PrimaryNameChanged

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PrimaryNameChanged

Source§

fn eq(&self, other: &PrimaryNameChanged) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for PrimaryNameChanged

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PrimaryNameChanged

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PrimaryNameChanged

Source§

impl StructuralPartialEq for PrimaryNameChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PrimaryNameChanged

Source§

impl StructuralPartialEq for PrimaryNameChanged

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -31,9 +31,9 @@ if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoEvent for T
where - T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: EventInstance,

§

fn into_event() -> Event

Converts the type into an [Event].
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolver.html b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolver.html index 350a370..67bba85 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolver.html +++ b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolver.html @@ -1,4 +1,4 @@ -ReverseResolver in casper_name_contracts::contracts::reverse_resolver - Rust
casper_name_contracts::contracts::reverse_resolver

Struct ReverseResolver

Source
pub struct ReverseResolver { /* private fields */ }
Expand description

Reverse Resolver contract. It resolves primary names to addresses.

+ReverseResolver in casper_name_contracts::contracts::reverse_resolver - Rust

Struct ReverseResolver

Source
pub struct ReverseResolver { /* private fields */ }
Expand description

Reverse Resolver contract. It resolves primary names to addresses.

Implementations§

Source§

impl ReverseResolver

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_primary_name(&mut self, primary_name: String)

Sets the primary preferred reverse resolution address for the caller.

Source

pub fn get_primary_name(&self, address: &Address) -> Option<String>

Returns the primary name for the address.

Trait Implementations§

Source§

impl HasEntrypoints for ReverseResolver

Source§

fn entrypoints() -> Vec<Entrypoint>

Returns the list of contract’s entrypoints.
Source§

impl HasEvents for ReverseResolver

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl HasIdent for ReverseResolver

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl Module for ReverseResolver

Source§

fn new(env: Rc<ContractEnv>) -> Self

Creates a new instance of the module with the given contract environment.
Source§

fn env(&self) -> Rc<ContractEnv>

Returns the contract environment associated with the module.
Source§

impl OdraContract for ReverseResolver

Source§

type HostRef = ReverseResolverHostRef

The host reference type.
Source§

type ContractRef = ReverseResolverContractRef

The contract reference type.
Source§

type InitArgs = ReverseResolverInitArgs

The init args type.
Source§

impl SchemaCustomTypes for ReverseResolver

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl SchemaEntrypoints for ReverseResolver

Source§

fn schema_entrypoints() -> Vec<Entrypoint>

Returns a vector of [Entrypoint]s.
Source§

impl SchemaErrors for ReverseResolver

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for ReverseResolver

Source§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
Source§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where @@ -21,12 +21,12 @@ init_args: <R as OdraContract>::InitArgs, cfg: T, ) -> Result<<R as OdraContract>::HostRef, OdraError>
where - T: OdraConfig,

Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: OdraConfig,
Tries to deploy a contract with given init args and configuration. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> HostRefLoader<<T as OdraContract>::HostRef> for T
where T: OdraContract,

§

fn load(env: &HostEnv, address: Address) -> <T as OdraContract>::HostRef

Loads an existing contract from the host environment.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -39,9 +39,9 @@ otherwise. Read more
§

impl<T> Revertible for T
where T: Module,

§

fn revert<E>(&self, error: E) -> !
where E: Into<OdraError>,

Reverts the contract execution with the given error.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToTokenId for T
where - T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Module,

Source§

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverContractRef.html b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverContractRef.html index c118e8b..0143a26 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverContractRef.html +++ b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverContractRef.html @@ -1,14 +1,14 @@ -ReverseResolverContractRef in casper_name_contracts::contracts::reverse_resolver - Rust
casper_name_contracts::contracts::reverse_resolver

Struct ReverseResolverContractRef

Source
pub struct ReverseResolverContractRef { /* private fields */ }
Expand description

ReverseResolver Contract Ref.

+ReverseResolverContractRef in casper_name_contracts::contracts::reverse_resolver - Rust

Struct ReverseResolverContractRef

Source
pub struct ReverseResolverContractRef { /* private fields */ }
Expand description

ReverseResolver Contract Ref.

Implementations§

Source§

impl ReverseResolverContractRef

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_primary_name(&mut self, primary_name: String)

Sets the primary preferred reverse resolution address for the caller.

Source

pub fn get_primary_name(&self, address: &Address) -> Option<String>

Returns the primary name for the address.

-

Trait Implementations§

Source§

impl ContractRef for ReverseResolverContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for ReverseResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for ReverseResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl ContractRef for ReverseResolverContractRef

Source§

fn new(env: Rc<ContractEnv>, address: Address) -> Self

Creates a new instance of the Contract Ref.
Source§

fn address(&self) -> &Address

Returns the address of the contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new contract reference with attached tokens, based on the current instance. Read more
Source§

impl SchemaErrors for ReverseResolverContractRef

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
Source§

impl SchemaEvents for ReverseResolverContractRef

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -18,9 +18,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverHostRef.html b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverHostRef.html index d7bf6e6..0db4c49 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverHostRef.html +++ b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverHostRef.html @@ -1,4 +1,4 @@ -ReverseResolverHostRef in casper_name_contracts::contracts::reverse_resolver - Rust
casper_name_contracts::contracts::reverse_resolver

Struct ReverseResolverHostRef

Source
pub struct ReverseResolverHostRef { /* private fields */ }
Expand description

ReverseResolver Host Ref.

+ReverseResolverHostRef in casper_name_contracts::contracts::reverse_resolver - Rust

Struct ReverseResolverHostRef

Source
pub struct ReverseResolverHostRef { /* private fields */ }
Expand description

ReverseResolver Host Ref.

Implementations§

Source§

impl ReverseResolverHostRef

Source

pub fn init(&mut self, name_token: Address)

Source

pub fn set_primary_name(&mut self, primary_name: String)

Sets the primary preferred reverse resolution address for the caller.

Source

pub fn get_primary_name(&self, address: &Address) -> Option<String>

Returns the primary name for the address.

Source§

impl ReverseResolverHostRef

Source

pub fn try_init(&mut self, name_token: Address) -> OdraResult<()>

Does not fail in case of error, returns odra::OdraResult instead.

@@ -9,16 +9,16 @@ address: &Address, ) -> OdraResult<Option<String>>

Returns the primary name for the address. Does not fail in case of error, returns odra::OdraResult instead.

-

Trait Implementations§

Source§

impl EntryPointsCallerProvider for ReverseResolverHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for ReverseResolverHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for ReverseResolverHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where - T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where +

Trait Implementations§

Source§

impl EntryPointsCallerProvider for ReverseResolverHostRef

Source§

fn entry_points_caller(env: &HostEnv) -> EntryPointsCaller

Returns an [EntryPointsCaller] for the given host environment.
Source§

impl HasIdent for ReverseResolverHostRef

Source§

fn ident() -> String

Returns the contract’s ident.
Source§

impl HostRef for ReverseResolverHostRef

Source§

fn new(address: Address, env: HostEnv) -> Self

Creates a new host side reference to a contract.
Source§

fn with_tokens(&self, tokens: U512) -> Self

Creates a new host reference with attached tokens, based on the current instance. Read more
Source§

fn contract_address(&self) -> Address

Returns the address of the contract.
Source§

fn env(&self) -> &HostEnv

Returns the host environment.
Source§

fn get_event<T>(&self, index: i32) -> Result<T, EventError>
where + T: FromBytes + EventInstance,

Returns the n-th event emitted by the contract. Read more
Source§

fn last_call(&self) -> ContractCallResult

Returns a detailed information about the last call of the contract.

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Addressable for T
where T: HostRef,

§

fn address(&self) -> Address

Returns a reference to the [Address] of the type.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -28,9 +28,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverInitArgs.html b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverInitArgs.html index 8b931da..f68142a 100644 --- a/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverInitArgs.html +++ b/docs/casper_name_contracts/contracts/reverse_resolver/struct.ReverseResolverInitArgs.html @@ -1,14 +1,14 @@ -ReverseResolverInitArgs in casper_name_contracts::contracts::reverse_resolver - Rust
casper_name_contracts::contracts::reverse_resolver

Struct ReverseResolverInitArgs

Source
pub struct ReverseResolverInitArgs {
+ReverseResolverInitArgs in casper_name_contracts::contracts::reverse_resolver - Rust

Struct ReverseResolverInitArgs

Source
pub struct ReverseResolverInitArgs {
     pub name_token: Address,
 }
Expand description

ReverseResolver contract constructor arguments.

-

Fields§

§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for ReverseResolverInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for ReverseResolverInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Fields§

§name_token: Address

Trait Implementations§

Source§

impl Into<RuntimeArgs> for ReverseResolverInitArgs

Source§

fn into(self) -> RuntimeArgs

Converts this type into the (usually inferred) input type.
Source§

impl InitArgs for ReverseResolverInitArgs

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -18,9 +18,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/contracts/token_id/index.html b/docs/casper_name_contracts/contracts/token_id/index.html index 6d96fcb..0bbcc77 100644 --- a/docs/casper_name_contracts/contracts/token_id/index.html +++ b/docs/casper_name_contracts/contracts/token_id/index.html @@ -1 +1 @@ -casper_name_contracts::contracts::token_id - Rust
casper_name_contracts::contracts

Module token_id

Source

Traits§

\ No newline at end of file +casper_name_contracts::contracts::token_id - Rust

Module token_id

Source

Traits§

ToTokenId
\ No newline at end of file diff --git a/docs/casper_name_contracts/contracts/token_id/trait.ToTokenId.html b/docs/casper_name_contracts/contracts/token_id/trait.ToTokenId.html index e851e5b..b4e92b6 100644 --- a/docs/casper_name_contracts/contracts/token_id/trait.ToTokenId.html +++ b/docs/casper_name_contracts/contracts/token_id/trait.ToTokenId.html @@ -1,6 +1,6 @@ -ToTokenId in casper_name_contracts::contracts::token_id - Rust
casper_name_contracts::contracts::token_id

Trait ToTokenId

Source
pub trait ToTokenId {
+ToTokenId in casper_name_contracts::contracts::token_id - Rust

Trait ToTokenId

Source
pub trait ToTokenId {
     // Required method
-    fn token_id(&self, label: String) -> U256;
-}

Required Methods§

Source

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.

+ fn token_id(&self, label: String) -> U256; +}

Required Methods§

Source

fn token_id(&self, label: String) -> U256

Converts the label to a token ID.

Implementors§

Source§

impl<T> ToTokenId for T
where T: Module,

\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/enum.NameTokenError.html b/docs/casper_name_contracts/data_structures/enum.NameTokenError.html index 5d086d1..404aa55 100644 --- a/docs/casper_name_contracts/data_structures/enum.NameTokenError.html +++ b/docs/casper_name_contracts/data_structures/enum.NameTokenError.html @@ -1,4 +1,4 @@ -NameTokenError in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Enum NameTokenError

Source
pub enum NameTokenError {
+NameTokenError in casper_name_contracts::data_structures - Rust

Enum NameTokenError

Source
pub enum NameTokenError {
     EmptyTLD = 1_001,
     TLDNotSupported = 1_002,
     PastExpirationDate = 1_003,
@@ -11,11 +11,11 @@
 

Variants§

§

EmptyTLD = 1_001

§

TLDNotSupported = 1_002

§

PastExpirationDate = 1_003

§

EmptyLabel = 1_004

§

SLDDoesNotExist = 1_005

§

SerializationError = 1_006

§

DeserializationError = 1_007

§

InvalidMetadata = 1_008

Trait Implementations§

Source§

impl Debug for NameTokenError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<NameTokenError> for OdraError

Source§

fn from(error: NameTokenError) -> Self

Converts to this type from the input type.
Source§

impl SchemaErrors for NameTokenError

Source§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -25,9 +25,9 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where +otherwise. Read more

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/data_structures/index.html b/docs/casper_name_contracts/data_structures/index.html index 1055907..d421d8e 100644 --- a/docs/casper_name_contracts/data_structures/index.html +++ b/docs/casper_name_contracts/data_structures/index.html @@ -1 +1 @@ -casper_name_contracts::data_structures - Rust
casper_name_contracts

Module data_structures

Source

Structs§

Enums§

Traits§

\ No newline at end of file +casper_name_contracts::data_structures - Rust

Module data_structures

Source

Structs§

NameMintInfo
Basic minting information for a name token.
NameTokenMetadata
Metadata associated with a name token.
NameTransferInfo
Pair of a label and owner address.
PaymentInfo
Information about a payment.
PaymentVoucher
Information about a payment and a list of NameMintInfo structs.
RenewalPaymentVoucher
Voucher for renewing multiple name tokens, plus payment information.
RenewalVoucher
Voucher for renewing multiple name tokens.
SecondarySaleVoucher
Information about a payment and a list of NameTransferInfo structs.
TokenRenewalInfo
Renewal information with new expiration time.
TokenizationVoucher
List of NameMintInfo structs and the expiration time of the voucher.

Enums§

NameTokenError
Errors that can occur while working with name tokens.

Traits§

ExpirableVoucher
Payment
\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/struct.NameMintInfo.html b/docs/casper_name_contracts/data_structures/struct.NameMintInfo.html index 02edd7d..7b84d76 100644 --- a/docs/casper_name_contracts/data_structures/struct.NameMintInfo.html +++ b/docs/casper_name_contracts/data_structures/struct.NameMintInfo.html @@ -1,4 +1,4 @@ -NameMintInfo in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct NameMintInfo

Source
pub struct NameMintInfo {
+NameMintInfo in casper_name_contracts::data_structures - Rust

Struct NameMintInfo

Source
pub struct NameMintInfo {
     pub label: String,
     pub owner: Address,
     pub token_expiration: u64,
@@ -9,21 +9,21 @@
     owner: Address,
     token_expiration: u64,
     asset_uri: &str,
-) -> Self

Trait Implementations§

Source§

impl CLTyped for NameMintInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for NameMintInfo

Source§

fn clone(&self) -> NameMintInfo

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NameMintInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for NameMintInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for NameMintInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for NameMintInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for NameMintInfo

Source§

fn eq(&self, other: &NameMintInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for NameMintInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for NameMintInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +) -> Self

Trait Implementations§

Source§

impl CLTyped for NameMintInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for NameMintInfo

Source§

fn clone(&self) -> NameMintInfo

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NameMintInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for NameMintInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for NameMintInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for NameMintInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for NameMintInfo

Source§

fn eq(&self, other: &NameMintInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for NameMintInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for NameMintInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for NameMintInfo

Source§

impl SchemaCustomElement for NameMintInfo

Source§

impl StructuralPartialEq for NameMintInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for NameMintInfo

Source§

impl SchemaCustomElement for NameMintInfo

Source§

impl StructuralPartialEq for NameMintInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -36,9 +36,9 @@ otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/data_structures/struct.NameTokenMetadata.html b/docs/casper_name_contracts/data_structures/struct.NameTokenMetadata.html index 3761ea3..3f658c4 100644 --- a/docs/casper_name_contracts/data_structures/struct.NameTokenMetadata.html +++ b/docs/casper_name_contracts/data_structures/struct.NameTokenMetadata.html @@ -1,22 +1,22 @@ -NameTokenMetadata in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct NameTokenMetadata

Source
pub struct NameTokenMetadata { /* private fields */ }
Expand description

Metadata associated with a name token.

+NameTokenMetadata in casper_name_contracts::data_structures - Rust

Struct NameTokenMetadata

Source
pub struct NameTokenMetadata { /* private fields */ }
Expand description

Metadata associated with a name token.

Implementations§

Source§

impl NameTokenMetadata

Source

pub fn with_resolver( name: &str, expiration: u64, asset_uri: &str, resolver: Address, -) -> Self

Source

pub fn with_no_resolver(name: &str, expiration: u64, asset_uri: &str) -> Self

Source

pub fn set_resolver(&mut self, resolver: Address)

Source

pub fn resolver(&self) -> OdraResult<Option<Address>>

Source

pub fn clear_resolver(&mut self)

Source

pub fn json(&self) -> String

Source

pub fn to_vec(&self) -> Vec<(String, String)>

Source

pub fn expiration(&self) -> u64

Source

pub fn set_expiration(&mut self, expiration: u64)

Trait Implementations§

Source§

impl Clone for NameTokenMetadata

Source§

fn clone(&self) -> NameTokenMetadata

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NameTokenMetadata

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for NameTokenMetadata

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for NameTokenMetadata

Source§

fn eq(&self, other: &NameTokenMetadata) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +) -> Self
Source

pub fn with_no_resolver(name: &str, expiration: u64, asset_uri: &str) -> Self

Source

pub fn set_resolver(&mut self, resolver: Address)

Source

pub fn resolver(&self) -> OdraResult<Option<Address>>

Source

pub fn clear_resolver(&mut self)

Source

pub fn json(&self) -> String

Source

pub fn to_vec(&self) -> Vec<(String, String)>

Source

pub fn expiration(&self) -> u64

Source

pub fn set_expiration(&mut self, expiration: u64)

Trait Implementations§

Source§

impl Clone for NameTokenMetadata

Source§

fn clone(&self) -> NameTokenMetadata

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NameTokenMetadata

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for NameTokenMetadata

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for NameTokenMetadata

Source§

fn eq(&self, other: &NameTokenMetadata) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for NameTokenMetadata

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl TryFrom<String> for NameTokenMetadata

Source§

type Error = NameTokenError

The type returned in the event of a conversion error.
Source§

fn try_from(value: String) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl TryFrom<Vec<(String, String)>> for NameTokenMetadata

Source§

type Error = NameTokenError

The type returned in the event of a conversion error.
Source§

fn try_from(value: Vec<(String, String)>) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl StructuralPartialEq for NameTokenMetadata

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where - T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: ?Sized,
Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where + T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -27,9 +27,9 @@ if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/data_structures/struct.NameTransferInfo.html b/docs/casper_name_contracts/data_structures/struct.NameTransferInfo.html index 0dfc1d6..c3ecb17 100644 --- a/docs/casper_name_contracts/data_structures/struct.NameTransferInfo.html +++ b/docs/casper_name_contracts/data_structures/struct.NameTransferInfo.html @@ -1,22 +1,22 @@ -NameTransferInfo in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct NameTransferInfo

Source
pub struct NameTransferInfo {
+NameTransferInfo in casper_name_contracts::data_structures - Rust

Struct NameTransferInfo

Source
pub struct NameTransferInfo {
     pub label: String,
     pub owner: Address,
 }
Expand description

Pair of a label and owner address.

-

Fields§

§label: String§owner: Address

Trait Implementations§

Source§

impl CLTyped for NameTransferInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for NameTransferInfo

Source§

fn clone(&self) -> NameTransferInfo

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NameTransferInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for NameTransferInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for NameTransferInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for NameTransferInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for NameTransferInfo

Source§

fn eq(&self, other: &NameTransferInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for NameTransferInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for NameTransferInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§label: String§owner: Address

Trait Implementations§

Source§

impl CLTyped for NameTransferInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for NameTransferInfo

Source§

fn clone(&self) -> NameTransferInfo

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NameTransferInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for NameTransferInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for NameTransferInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for NameTransferInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for NameTransferInfo

Source§

fn eq(&self, other: &NameTransferInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for NameTransferInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for NameTransferInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for NameTransferInfo

Source§

impl SchemaCustomElement for NameTransferInfo

Source§

impl StructuralPartialEq for NameTransferInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for NameTransferInfo

Source§

impl SchemaCustomElement for NameTransferInfo

Source§

impl StructuralPartialEq for NameTransferInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -29,9 +29,9 @@ otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/data_structures/struct.PaymentInfo.html b/docs/casper_name_contracts/data_structures/struct.PaymentInfo.html index 6ac55f4..aa9d7f9 100644 --- a/docs/casper_name_contracts/data_structures/struct.PaymentInfo.html +++ b/docs/casper_name_contracts/data_structures/struct.PaymentInfo.html @@ -1,23 +1,23 @@ -PaymentInfo in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct PaymentInfo

Source
pub struct PaymentInfo {
+PaymentInfo in casper_name_contracts::data_structures - Rust

Struct PaymentInfo

Source
pub struct PaymentInfo {
     pub buyer: Address,
     pub payment_id: String,
-    pub amount: U512,
+    pub amount: U512,
 }
Expand description

Information about a payment.

-

Fields§

§buyer: Address§payment_id: String§amount: U512

Trait Implementations§

Source§

impl CLTyped for PaymentInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for PaymentInfo

Source§

fn clone(&self) -> PaymentInfo

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PaymentInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for PaymentInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for PaymentInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for PaymentInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PaymentInfo

Source§

fn eq(&self, other: &PaymentInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for PaymentInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PaymentInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§buyer: Address§payment_id: String§amount: U512

Trait Implementations§

Source§

impl CLTyped for PaymentInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for PaymentInfo

Source§

fn clone(&self) -> PaymentInfo

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PaymentInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for PaymentInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for PaymentInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for PaymentInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PaymentInfo

Source§

fn eq(&self, other: &PaymentInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for PaymentInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PaymentInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PaymentInfo

Source§

impl SchemaCustomElement for PaymentInfo

Source§

impl StructuralPartialEq for PaymentInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PaymentInfo

Source§

impl SchemaCustomElement for PaymentInfo

Source§

impl StructuralPartialEq for PaymentInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -30,9 +30,9 @@ otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/data_structures/struct.PaymentVoucher.html b/docs/casper_name_contracts/data_structures/struct.PaymentVoucher.html index 14f7770..f577c7c 100644 --- a/docs/casper_name_contracts/data_structures/struct.PaymentVoucher.html +++ b/docs/casper_name_contracts/data_structures/struct.PaymentVoucher.html @@ -1,29 +1,29 @@ -PaymentVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct PaymentVoucher

Source
pub struct PaymentVoucher {
+PaymentVoucher in casper_name_contracts::data_structures - Rust

Struct PaymentVoucher

Source
pub struct PaymentVoucher {
     pub payment: PaymentInfo,
     pub names: Vec<NameMintInfo>,
     pub voucher_expiration: u64,
 }
Expand description

Information about a payment and a list of NameMintInfo structs.

Fields§

§payment: PaymentInfo§names: Vec<NameMintInfo>§voucher_expiration: u64

Implementations§

Source§

impl PaymentVoucher

Source

pub fn new( - amount: U512, + amount: U512, payment_id: &str, buyer: Address, names: Vec<NameMintInfo>, voucher_expiration: u64, -) -> Self

Trait Implementations§

Source§

impl CLTyped for PaymentVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for PaymentVoucher

Source§

fn clone(&self) -> PaymentVoucher

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PaymentVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<PaymentVoucher> for TokenizationVoucher

Source§

fn from(voucher: PaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for PaymentVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for PaymentVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for PaymentVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PaymentVoucher

Source§

fn eq(&self, other: &PaymentVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Payment for PaymentVoucher

Source§

impl SchemaCustomTypes for PaymentVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PaymentVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +) -> Self

Trait Implementations§

Source§

impl CLTyped for PaymentVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for PaymentVoucher

Source§

fn clone(&self) -> PaymentVoucher

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PaymentVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<PaymentVoucher> for TokenizationVoucher

Source§

fn from(voucher: PaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for PaymentVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for PaymentVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for PaymentVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for PaymentVoucher

Source§

fn eq(&self, other: &PaymentVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Payment for PaymentVoucher

Source§

impl SchemaCustomTypes for PaymentVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for PaymentVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PaymentVoucher

Source§

impl SchemaCustomElement for PaymentVoucher

Source§

impl StructuralPartialEq for PaymentVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for PaymentVoucher

Source§

impl SchemaCustomElement for PaymentVoucher

Source§

impl StructuralPartialEq for PaymentVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -36,9 +36,9 @@ otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/data_structures/struct.RenewalPaymentVoucher.html b/docs/casper_name_contracts/data_structures/struct.RenewalPaymentVoucher.html index c047156..855ed79 100644 --- a/docs/casper_name_contracts/data_structures/struct.RenewalPaymentVoucher.html +++ b/docs/casper_name_contracts/data_structures/struct.RenewalPaymentVoucher.html @@ -1,29 +1,29 @@ -RenewalPaymentVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct RenewalPaymentVoucher

Source
pub struct RenewalPaymentVoucher {
+RenewalPaymentVoucher in casper_name_contracts::data_structures - Rust

Struct RenewalPaymentVoucher

Source
pub struct RenewalPaymentVoucher {
     pub payment: PaymentInfo,
     pub tokens: Vec<TokenRenewalInfo>,
     pub voucher_expiration: u64,
 }
Expand description

Voucher for renewing multiple name tokens, plus payment information.

Fields§

§payment: PaymentInfo§tokens: Vec<TokenRenewalInfo>§voucher_expiration: u64

Implementations§

Source§

impl RenewalPaymentVoucher

Source

pub fn new( - amount: U512, + amount: U512, payment_id: &str, buyer: Address, tokens: Vec<TokenRenewalInfo>, voucher_expiration: u64, -) -> Self

Trait Implementations§

Source§

impl CLTyped for RenewalPaymentVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for RenewalPaymentVoucher

Source§

fn clone(&self) -> RenewalPaymentVoucher

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RenewalPaymentVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<RenewalPaymentVoucher> for RenewalVoucher

Source§

fn from(voucher: RenewalPaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for RenewalPaymentVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for RenewalPaymentVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for RenewalPaymentVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for RenewalPaymentVoucher

Source§

fn eq(&self, other: &RenewalPaymentVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Payment for RenewalPaymentVoucher

Source§

impl SchemaCustomTypes for RenewalPaymentVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for RenewalPaymentVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +) -> Self

Trait Implementations§

Source§

impl CLTyped for RenewalPaymentVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for RenewalPaymentVoucher

Source§

fn clone(&self) -> RenewalPaymentVoucher

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RenewalPaymentVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<RenewalPaymentVoucher> for RenewalVoucher

Source§

fn from(voucher: RenewalPaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for RenewalPaymentVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for RenewalPaymentVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for RenewalPaymentVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for RenewalPaymentVoucher

Source§

fn eq(&self, other: &RenewalPaymentVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Payment for RenewalPaymentVoucher

Source§

impl SchemaCustomTypes for RenewalPaymentVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for RenewalPaymentVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for RenewalPaymentVoucher

Source§

impl SchemaCustomElement for RenewalPaymentVoucher

Source§

impl StructuralPartialEq for RenewalPaymentVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for RenewalPaymentVoucher

Source§

impl SchemaCustomElement for RenewalPaymentVoucher

Source§

impl StructuralPartialEq for RenewalPaymentVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -36,9 +36,9 @@ otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/data_structures/struct.RenewalVoucher.html b/docs/casper_name_contracts/data_structures/struct.RenewalVoucher.html index 38f6486..9798f3e 100644 --- a/docs/casper_name_contracts/data_structures/struct.RenewalVoucher.html +++ b/docs/casper_name_contracts/data_structures/struct.RenewalVoucher.html @@ -1,22 +1,22 @@ -RenewalVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct RenewalVoucher

Source
pub struct RenewalVoucher {
+RenewalVoucher in casper_name_contracts::data_structures - Rust

Struct RenewalVoucher

Source
pub struct RenewalVoucher {
     pub tokens: Vec<TokenRenewalInfo>,
     pub voucher_expiration: u64,
 }
Expand description

Voucher for renewing multiple name tokens.

-

Fields§

§tokens: Vec<TokenRenewalInfo>§voucher_expiration: u64

Implementations§

Source§

impl RenewalVoucher

Source

pub fn new(tokens: Vec<TokenRenewalInfo>, voucher_expiration: u64) -> Self

Trait Implementations§

Source§

impl CLTyped for RenewalVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for RenewalVoucher

Source§

fn clone(&self) -> RenewalVoucher

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RenewalVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl ExpirableVoucher for RenewalVoucher

Source§

impl From<RenewalPaymentVoucher> for RenewalVoucher

Source§

fn from(voucher: RenewalPaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for RenewalVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for RenewalVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for RenewalVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for RenewalVoucher

Source§

fn eq(&self, other: &RenewalVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for RenewalVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for RenewalVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§tokens: Vec<TokenRenewalInfo>§voucher_expiration: u64

Implementations§

Source§

impl RenewalVoucher

Source

pub fn new(tokens: Vec<TokenRenewalInfo>, voucher_expiration: u64) -> Self

Trait Implementations§

Source§

impl CLTyped for RenewalVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for RenewalVoucher

Source§

fn clone(&self) -> RenewalVoucher

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RenewalVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl ExpirableVoucher for RenewalVoucher

Source§

impl From<RenewalPaymentVoucher> for RenewalVoucher

Source§

fn from(voucher: RenewalPaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for RenewalVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for RenewalVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for RenewalVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for RenewalVoucher

Source§

fn eq(&self, other: &RenewalVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for RenewalVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for RenewalVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for RenewalVoucher

Source§

impl SchemaCustomElement for RenewalVoucher

Source§

impl StructuralPartialEq for RenewalVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for RenewalVoucher

Source§

impl SchemaCustomElement for RenewalVoucher

Source§

impl StructuralPartialEq for RenewalVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -29,9 +29,9 @@ otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/data_structures/struct.SecondarySaleVoucher.html b/docs/casper_name_contracts/data_structures/struct.SecondarySaleVoucher.html index 9ca8e52..5df734e 100644 --- a/docs/casper_name_contracts/data_structures/struct.SecondarySaleVoucher.html +++ b/docs/casper_name_contracts/data_structures/struct.SecondarySaleVoucher.html @@ -1,23 +1,23 @@ -SecondarySaleVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct SecondarySaleVoucher

Source
pub struct SecondarySaleVoucher {
+SecondarySaleVoucher in casper_name_contracts::data_structures - Rust

Struct SecondarySaleVoucher

Source
pub struct SecondarySaleVoucher {
     pub payment: PaymentInfo,
     pub names: Vec<NameTransferInfo>,
     pub voucher_expiration: u64,
 }
Expand description

Information about a payment and a list of NameTransferInfo structs.

-

Fields§

§payment: PaymentInfo§names: Vec<NameTransferInfo>§voucher_expiration: u64

Trait Implementations§

Source§

impl CLTyped for SecondarySaleVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for SecondarySaleVoucher

Source§

fn clone(&self) -> SecondarySaleVoucher

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SecondarySaleVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for SecondarySaleVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for SecondarySaleVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for SecondarySaleVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for SecondarySaleVoucher

Source§

fn eq(&self, other: &SecondarySaleVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Payment for SecondarySaleVoucher

Source§

impl SchemaCustomTypes for SecondarySaleVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for SecondarySaleVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§payment: PaymentInfo§names: Vec<NameTransferInfo>§voucher_expiration: u64

Trait Implementations§

Source§

impl CLTyped for SecondarySaleVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for SecondarySaleVoucher

Source§

fn clone(&self) -> SecondarySaleVoucher

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SecondarySaleVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for SecondarySaleVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for SecondarySaleVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for SecondarySaleVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for SecondarySaleVoucher

Source§

fn eq(&self, other: &SecondarySaleVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Payment for SecondarySaleVoucher

Source§

impl SchemaCustomTypes for SecondarySaleVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for SecondarySaleVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for SecondarySaleVoucher

Source§

impl SchemaCustomElement for SecondarySaleVoucher

Source§

impl StructuralPartialEq for SecondarySaleVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for SecondarySaleVoucher

Source§

impl SchemaCustomElement for SecondarySaleVoucher

Source§

impl StructuralPartialEq for SecondarySaleVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -30,9 +30,9 @@ otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/data_structures/struct.TokenRenewalInfo.html b/docs/casper_name_contracts/data_structures/struct.TokenRenewalInfo.html index d835baf..fc408e7 100644 --- a/docs/casper_name_contracts/data_structures/struct.TokenRenewalInfo.html +++ b/docs/casper_name_contracts/data_structures/struct.TokenRenewalInfo.html @@ -1,22 +1,22 @@ -TokenRenewalInfo in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct TokenRenewalInfo

Source
pub struct TokenRenewalInfo {
-    pub token_id: U256,
+TokenRenewalInfo in casper_name_contracts::data_structures - Rust

Struct TokenRenewalInfo

Source
pub struct TokenRenewalInfo {
+    pub token_id: U256,
     pub token_expiration: u64,
 }
Expand description

Renewal information with new expiration time.

-

Fields§

§token_id: U256§token_expiration: u64

Implementations§

Source§

impl TokenRenewalInfo

Source

pub fn new(token_id: U256, token_expiration: u64) -> Self

Trait Implementations§

Source§

impl CLTyped for TokenRenewalInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for TokenRenewalInfo

Source§

fn clone(&self) -> TokenRenewalInfo

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TokenRenewalInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for TokenRenewalInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for TokenRenewalInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for TokenRenewalInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for TokenRenewalInfo

Source§

fn eq(&self, other: &TokenRenewalInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for TokenRenewalInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for TokenRenewalInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§token_id: U256§token_expiration: u64

Implementations§

Source§

impl TokenRenewalInfo

Source

pub fn new(token_id: U256, token_expiration: u64) -> Self

Trait Implementations§

Source§

impl CLTyped for TokenRenewalInfo

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for TokenRenewalInfo

Source§

fn clone(&self) -> TokenRenewalInfo

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TokenRenewalInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromBytes for TokenRenewalInfo

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for TokenRenewalInfo

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for TokenRenewalInfo

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for TokenRenewalInfo

Source§

fn eq(&self, other: &TokenRenewalInfo) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for TokenRenewalInfo

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for TokenRenewalInfo

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for TokenRenewalInfo

Source§

impl SchemaCustomElement for TokenRenewalInfo

Source§

impl StructuralPartialEq for TokenRenewalInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for TokenRenewalInfo

Source§

impl SchemaCustomElement for TokenRenewalInfo

Source§

impl StructuralPartialEq for TokenRenewalInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -29,9 +29,9 @@ otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/data_structures/struct.TokenizationVoucher.html b/docs/casper_name_contracts/data_structures/struct.TokenizationVoucher.html index 9412158..364c23a 100644 --- a/docs/casper_name_contracts/data_structures/struct.TokenizationVoucher.html +++ b/docs/casper_name_contracts/data_structures/struct.TokenizationVoucher.html @@ -1,22 +1,22 @@ -TokenizationVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Struct TokenizationVoucher

Source
pub struct TokenizationVoucher {
+TokenizationVoucher in casper_name_contracts::data_structures - Rust

Struct TokenizationVoucher

Source
pub struct TokenizationVoucher {
     pub names: Vec<NameMintInfo>,
     pub voucher_expiration: u64,
 }
Expand description

List of NameMintInfo structs and the expiration time of the voucher.

-

Fields§

§names: Vec<NameMintInfo>§voucher_expiration: u64

Implementations§

Source§

impl TokenizationVoucher

Source

pub fn new(names: Vec<NameMintInfo>, voucher_expiration: u64) -> Self

Trait Implementations§

Source§

impl CLTyped for TokenizationVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for TokenizationVoucher

Source§

fn clone(&self) -> TokenizationVoucher

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TokenizationVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl ExpirableVoucher for TokenizationVoucher

Source§

impl From<PaymentVoucher> for TokenizationVoucher

Source§

fn from(voucher: PaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for TokenizationVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for TokenizationVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for TokenizationVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for TokenizationVoucher

Source§

fn eq(&self, other: &TokenizationVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for TokenizationVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for TokenizationVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to +

Fields§

§names: Vec<NameMintInfo>§voucher_expiration: u64

Implementations§

Source§

impl TokenizationVoucher

Source

pub fn new(names: Vec<NameMintInfo>, voucher_expiration: u64) -> Self

Trait Implementations§

Source§

impl CLTyped for TokenizationVoucher

Source§

fn cl_type() -> CLType

The CLType of Self.
Source§

impl Clone for TokenizationVoucher

Source§

fn clone(&self) -> TokenizationVoucher

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TokenizationVoucher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl ExpirableVoucher for TokenizationVoucher

Source§

impl From<PaymentVoucher> for TokenizationVoucher

Source§

fn from(voucher: PaymentVoucher) -> Self

Converts to this type from the input type.
Source§

impl FromBytes for TokenizationVoucher

Source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
Source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
Source§

impl HasEvents for TokenizationVoucher

Source§

fn events() -> Vec<Event>

Returns a list of Events used by the contract.
Source§

fn event_schemas() -> BTreeMap<String, Schema>

Returns a map of event schemas used by the contract.
Source§

impl NamedCLTyped for TokenizationVoucher

Source§

fn ty() -> NamedCLType

Returns the NamedCLType of the implementing type.
Source§

impl PartialEq for TokenizationVoucher

Source§

fn eq(&self, other: &TokenizationVoucher) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl SchemaCustomTypes for TokenizationVoucher

Source§

fn schema_types() -> Vec<Option<CustomType>>

Returns a vector of optional [CustomType]s.
Source§

impl ToBytes for TokenizationVoucher

Source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is -relatively cheap.
Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where - Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for TokenizationVoucher

Source§

impl SchemaCustomElement for TokenizationVoucher

Source§

impl StructuralPartialEq for TokenizationVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +relatively cheap.

Source§

fn into_bytes(self) -> Result<Vec<u8>, Error>
where + Self: Sized,

Consumes self and serializes to a Vec<u8>.
Source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
Source§

impl Eq for TokenizationVoucher

Source§

impl SchemaCustomElement for TokenizationVoucher

Source§

impl StructuralPartialEq for TokenizationVoucher

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> DynClone for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> EntrypointArgument for T
where - T: CLTyped + ToBytes,

§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+ T: CLTyped + ToBytes,
§

fn is_required() -> bool

Returns true if the argument is required.
§

fn cl_type() -> CLType

Returns the CLType of the argument.
§

fn insert_runtime_arg(self, name: &str, args: &mut RuntimeArgs)

Inserts the argument into the runtime args.
§

fn unwrap(value: Option<T>, env: &ContractEnv) -> T

Unwraps the argument from an Option.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> @@ -29,9 +29,9 @@ otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SchemaErrors for T
where T: SchemaCustomElement,

§

fn schema_errors() -> Vec<UserError>

Returns a vector of [UserError]s.
§

impl<T> SchemaEvents for T
where T: SchemaCustomElement,

§

fn schema_events() -> Vec<Event>

Returns a vector of [Event]s.
§

fn custom_types() -> Vec<Option<CustomType>>

Returns a vector of [CustomType]s. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a diff --git a/docs/casper_name_contracts/data_structures/trait.ExpirableVoucher.html b/docs/casper_name_contracts/data_structures/trait.ExpirableVoucher.html index 694c0e8..1b6f74f 100644 --- a/docs/casper_name_contracts/data_structures/trait.ExpirableVoucher.html +++ b/docs/casper_name_contracts/data_structures/trait.ExpirableVoucher.html @@ -1,4 +1,4 @@ -ExpirableVoucher in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Trait ExpirableVoucher

Source
pub trait ExpirableVoucher {
+ExpirableVoucher in casper_name_contracts::data_structures - Rust

Trait ExpirableVoucher

Source
pub trait ExpirableVoucher {
     // Required method
     fn expiration_time(&self) -> u64;
 }

Required Methods§

Implementors§

\ No newline at end of file diff --git a/docs/casper_name_contracts/data_structures/trait.Payment.html b/docs/casper_name_contracts/data_structures/trait.Payment.html index a7b9bec..22187cd 100644 --- a/docs/casper_name_contracts/data_structures/trait.Payment.html +++ b/docs/casper_name_contracts/data_structures/trait.Payment.html @@ -1,4 +1,4 @@ -Payment in casper_name_contracts::data_structures - Rust
casper_name_contracts::data_structures

Trait Payment

Source
pub trait Payment {
+Payment in casper_name_contracts::data_structures - Rust

Trait Payment

Source
pub trait Payment {
     // Required method
     fn payment_info(&self) -> &PaymentInfo;
 }

Required Methods§

Implementors§

\ No newline at end of file diff --git a/docs/casper_name_contracts/index.html b/docs/casper_name_contracts/index.html index 484029f..2577c62 100644 --- a/docs/casper_name_contracts/index.html +++ b/docs/casper_name_contracts/index.html @@ -1 +1 @@ -casper_name_contracts - Rust

Crate casper_name_contracts

Source

Modules§

\ No newline at end of file +casper_name_contracts - Rust

Crate casper_name_contracts

Source

Modules§

contracts
data_structures
\ No newline at end of file diff --git a/docs/help.html b/docs/help.html index 16a34b8..fc9aca8 100644 --- a/docs/help.html +++ b/docs/help.html @@ -1 +1 @@ -Help

Rustdoc help

Back
\ No newline at end of file +Help

Rustdoc help

Back
\ No newline at end of file diff --git a/docs/search-index.js b/docs/search-index.js index e71160f..982e08b 100644 --- a/docs/search-index.js +++ b/docs/search-index.js @@ -1,4 +1,4 @@ -var searchIndex = new Map(JSON.parse('[["casper_name_contracts",{"t":"CCCCCCCCCFFFPPFFGFFPPPFPPFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNONNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPFFGFFPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNSPFPPPFFGFFPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFPPPFFFPPFGFPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFFNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMPPPKPFGFFPKFFFFPFPPFFNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNOOOOOOMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNNNNNNNN","n":["contracts","data_structures","controller","marketplace","name_token","registrar","resolver","reverse_resolver","token_id","BaseController","BaseControllerContractRef","BaseControllerHostRef","BuyerMustBeCaller","ContractAddressExpected","Controller","ControllerContractRef","ControllerError","ControllerHostRef","ControllerInitArgs","FeeCollectorNotSet","InsufficientPayment","InvalidSignature","PaymentFulfilled","PaymentTooLarge","RegistrarNotSet","SignerPublicKeyChanged","TreasuryAddressChanged","address","","","","borrow","","","","","","","","","","","borrow_mut","","","","","","","","","","","buy","","","buy_and_renew","","","cl_type","","","","","","contract_address","","custom_types","","deploy","","deploy_with_cfg","","entry_points_caller","","entrypoints","","env","","","","eq","","","event_schemas","","events","","fmt","","","from","","","","","","","","","","","from_bytes","","","get_event","","grant_role","","","","","","has_role","","","","","","ident","","","","init","","","","insert_runtime_arg","","","into","","","","","","","","","","","","into_event","","","is_paused","","","","","","is_required","","","last_call","","load","","name","","","new","","","","","","","","","pause","","","","process_payment_voucher","registrar","renew","","","require_not_paused","","","resolve","","","revert","","revoke_role","","","","","","schema","","","schema_entrypoints","","schema_errors","","","schema_events","","schema_types","","","","","serialized_length","","","set_signer_public_key","","","","set_treasury","","","","signer","signer_public_key","","","","to_bytes","","","token_id","","treasury","try_buy","try_buy_and_renew","try_deploy","","try_deploy_with_cfg","","try_from","","","","","","","","","","","try_grant_role","","try_has_role","","try_init","try_into","","","","","","","","","","","try_is_paused","","try_pause","try_renew","try_require_not_paused","try_resolve","try_revoke_role","","try_set_signer_public_key","try_set_treasury","try_signer_public_key","try_unpause","ty","","","type_id","","","","","","","","","","","unpause","","","","unwrap","","","vzip","","","","","","","","","","","with_tokens","","","","SecondaryMarket","SecondaryMarketContractRef","SecondaryMarketHostRef","SecondaryMarketInitArgs","address","","borrow","","","","borrow_mut","","","","buy","","","contract_address","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","event_schemas","events","from","","","","get_event","grant_role","","","has_role","","","ident","","init","","","into","","","","","is_paused","","","last_call","load","name_token","new","","","pause","","","revert","revoke_role","","","schema_entrypoints","schema_errors","schema_events","schema_types","set_signer_public_key","","","set_treasury","","","signer","signer_public_key","","","token_id","treasury","try_buy","try_deploy","try_deploy_with_cfg","try_from","","","","try_grant_role","try_has_role","try_init","try_into","","","","try_is_paused","try_pause","try_revoke_role","try_set_signer_public_key","try_set_treasury","try_signer_public_key","try_unpause","type_id","","","","unpause","","","vzip","","","","with_tokens","","ExpiredTokenTransfer","InvalidResolver","InvalidTokenIdentifier","InvalidTokenOwner","NameToken","NameTokenContractRef","NameTokenError","NameTokenHostRef","NameTokenInitArgs","NotWhitelisted","TokenSupplyDepleted","WhitelistedAlready","accept_ownership","","","address","","admin_transfer","","","approve","","","approve_for_all","","","approved_for","","","assert_is_owner","","","balance_of","","","borrow","","","","","borrow_mut","","","","","burn","","","contract_address","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","event_schemas","events","from","","","","","get_default_resolver","","","get_event","get_owner","","","get_pending_owner","","","ident","","init","","","into","","","","","","is_approved_for_all","","","is_token_valid","","","last_call","load","max_supply","mint","","","name","","","","new","","","owner_of","","","renounce_ownership","","","resolver","","","revert","revoke_approval","","","revoke_approval_for_all","","","revoke_whitelist","","","safe_transfer_from","","","schema_entrypoints","schema_errors","","schema_events","schema_types","set_default_resolver","","","set_resolver","","","set_token_metadata","","","symbol","","","","token_exists","","","token_id","token_metadata","","","transfer_from","","","transfer_ownership","","","try_accept_ownership","try_admin_transfer","try_approve","try_approve_for_all","try_approved_for","try_assert_is_owner","try_balance_of","try_burn","try_deploy","try_deploy_with_cfg","try_from","","","","","try_get_default_resolver","try_get_owner","try_get_pending_owner","try_init","try_into","","","","","try_is_approved_for_all","try_is_token_valid","try_mint","try_name","try_owner_of","try_renounce_ownership","try_resolver","try_revoke_approval","try_revoke_approval_for_all","try_revoke_whitelist","try_safe_transfer_from","try_set_default_resolver","try_set_resolver","try_set_token_metadata","try_symbol","try_token_exists","try_token_metadata","try_transfer_from","try_transfer_ownership","try_whitelist","type_id","","","","","vzip","","","","","whitelist","","","with_tokens","","wrapped_metadata","CONTROLLER_ROLE","ExpirationDateInThePast","GracePeriodChanged","GracePeriodExpired","GracePeriodTooLong","NameTokenIsNotValid","Registrar","RegistrarContractRef","RegistrarError","RegistrarHostRef","RegistrarInitArgs","TokenDoesNotExist","TokenNameIsNotValid","TokenNotExpired","VoucherExpired","address","","admin_burn","","","admin_prolong","","","admin_prolong_and_register","","","admin_register","","","admin_transfer","","","borrow","","","","","","borrow_mut","","","","","","cl_type","","contract_address","controller_prolong","","","controller_prolong_and_register","","","controller_register","","","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","eq","event_schemas","events","expire","","","fmt","from","","","","","","from_bytes","get_event","grace_period","","","grant_role","","","has_role","","","ident","","init","","","insert_runtime_arg","into","","","","","","","into_event","is_paused","","","is_required","last_call","load","name","name_token","new","","","","pause","","","resolve","","","revert","revoke_role","","","schema","schema_entrypoints","schema_errors","","schema_events","schema_types","","serialized_length","set_grace_period","","","to_bytes","token_id","try_admin_burn","try_admin_prolong","try_admin_prolong_and_register","try_admin_register","try_admin_transfer","try_controller_prolong","try_controller_prolong_and_register","try_controller_register","try_deploy","try_deploy_with_cfg","try_expire","try_from","","","","","","try_grace_period","try_grant_role","try_has_role","try_init","try_into","","","","","","try_is_paused","try_pause","try_resolve","try_revoke_role","try_set_grace_period","try_unpause","ty","type_id","","","","","","unpause","","","unwrap","vzip","","","","","","with_tokens","","DefaultResolver","DefaultResolverContractRef","DefaultResolverHostRef","DefaultResolverInitArgs","InvalidDomain","InvalidSubdomainFormat","InvalidTokenName","NameTokenAddressChanged","ResolutionChanged","ResolutionCleared","ResolutionSetByInvalidOwner","ResolutionSetWithInvalidToken","ResolverContractRef","ResolverError","ResolverHostRef","UnauthorizedInvalidation","UnauthorizedTokenAddressUpdate","address","","","","borrow","","","","","","","","","","borrow_mut","","","","","","","","","","cl_type","","","","","","contract_address","","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","","eq","","","event_schemas","events","fmt","","","from","","","","","","","","","","from_bytes","","","get_event","","grant_role","","","has_role","","","ident","","init","","","","","insert_runtime_arg","","","into","","","","","","","","","","","into_event","","","invalidate_resolutions","","","","","is_required","","","last_call","","load","name","","","name_token","new","","","","","","","","resolve","","","","","revert","revoke_role","","","schema","","","schema_entrypoints","schema_errors","","schema_events","schema_types","","","","serialized_length","","","set_name_token","","","","","set_resolution","","","","","to_bytes","","","token_id","try_deploy","try_deploy_with_cfg","try_from","","","","","","","","","","try_grant_role","try_has_role","try_init","","try_into","","","","","","","","","","try_invalidate_resolutions","","try_resolve","","try_revoke_role","try_set_name_token","","try_set_resolution","","ty","","","type_id","","","","","","","","","","unwrap","","","vzip","","","","","","","","","","with_tokens","","","","PrimaryNameChanged","ReverseResolver","ReverseResolverContractRef","ReverseResolverHostRef","ReverseResolverInitArgs","address","","","borrow","","","","","borrow_mut","","","","","cl_type","","contract_address","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","eq","event_schemas","events","fmt","from","","","","","from_bytes","get_event","get_primary_name","","","ident","","init","","","insert_runtime_arg","into","","","","","","into_event","is_required","last_call","load","name","name_token","new","","","","new_primary_name","old_primary_name","revert","schema","schema_entrypoints","schema_errors","schema_events","schema_types","","serialized_length","set_primary_name","","","to_bytes","token_id","try_deploy","try_deploy_with_cfg","try_from","","","","","try_get_primary_name","try_init","try_into","","","","","try_set_primary_name","ty","type_id","","","","","unwrap","vzip","","","","","with_tokens","","ToTokenId","token_id","DeserializationError","EmptyLabel","EmptyTLD","ExpirableVoucher","InvalidMetadata","NameMintInfo","NameTokenError","NameTokenMetadata","NameTransferInfo","PastExpirationDate","Payment","PaymentInfo","PaymentVoucher","RenewalPaymentVoucher","RenewalVoucher","SLDDoesNotExist","SecondarySaleVoucher","SerializationError","TLDNotSupported","TokenRenewalInfo","TokenizationVoucher","__clone_box","","","","","","","","","","amount","asset_uri","borrow","","","","","","","","","","","borrow_mut","","","","","","","","","","","buyer","cl_type","","","","","","","","","","","","","","","","","","clear_resolver","clone","","","","","","","","","","clone_into","","","","","","","","","","clone_to_uninit","","","","","","","","","","deserialize","eq","","","","","","","","","","event_schemas","","","","","","","","","events","","","","","","","","","expiration","expiration_time","","","fmt","","","","","","","","","","","from","","","","","","","","","","","","","from_bytes","","","","","","","","","insert_runtime_arg","","","","","","","","","into","","","","","","","","","","","is_required","","","","","","","","","json","label","","names","","","new","","","","","","owner","","payment","","","payment_id","payment_info","","","","resolver","schema_errors","schema_types","","","","","","","","","serialize","serialized_length","","","","","","","","","set_expiration","set_resolver","to_bytes","","","","","","","","","to_owned","","","","","","","","","","to_vec","token_expiration","","token_id","tokens","","try_from","","","","","","","","","","","","","try_into","","","","","","","","","","","ty","","","","","","","","","type_id","","","","","","","","","","","unwrap","","","","","","","","","voucher_expiration","","","","","vzip","","","","","","","","","","","with_no_resolver","with_resolver"],"q":[[0,"casper_name_contracts"],[2,"casper_name_contracts::contracts"],[9,"casper_name_contracts::contracts::controller"],[311,"casper_name_contracts::contracts::marketplace"],[425,"casper_name_contracts::contracts::name_token"],[641,"casper_name_contracts::contracts::registrar"],[829,"casper_name_contracts::contracts::resolver"],[1064,"casper_name_contracts::contracts::reverse_resolver"],[1172,"casper_name_contracts::contracts::token_id"],[1174,"casper_name_contracts::data_structures"],[1515,"odra_core::address"],[1516,"casper_types::bytesrepr::bytes"],[1517,"casper_name_contracts::contracts::controller::__controller_test_parts"],[1518,"casper_types::cl_type"],[1519,"casper_name_contracts::contracts::controller::__base_controller_test_parts"],[1520,"casper_contract_schema"],[1521,"core::option"],[1522,"alloc::vec"],[1523,"odra_core::host"],[1524,"odra_core::entry_point_callback"],[1525,"odra_core::contract_def"],[1526,"odra_core::contract_env"],[1527,"alloc::rc"],[1528,"alloc::string"],[1529,"casper_event_standard::schema"],[1530,"alloc::collections::btree::map"],[1531,"core::fmt"],[1532,"casper_types::bytesrepr"],[1533,"core::result"],[1534,"odra_core::error"],[1535,"casper_event_standard"],[1536,"odra_modules::access::access_control"],[1537,"casper_types::crypto::asymmetric_key"],[1538,"casper_types::transaction::runtime_args"],[1539,"odra_core::call_result"],[1540,"casper_types::uint::macro_code"],[1541,"core::convert"],[1542,"casper_contract_schema::ty"],[1543,"core::any"],[1544,"casper_name_contracts::contracts::marketplace::__secondary_market_test_parts"],[1545,"casper_name_contracts::contracts::name_token::__name_token_test_parts"],[1546,"casper_name_contracts::contracts::registrar::__registrar_test_parts"],[1547,"casper_name_contracts::contracts::resolver::__resolver_test_parts"],[1548,"casper_name_contracts::contracts::resolver::__default_resolver_test_parts"],[1549,"casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts"],[1550,"dyn_clone::sealed"],[1551,"serde::de"],[1552,"serde::ser"]],"i":"````````````Mb0`````000`00``bAdhAjC`CdCfl76EnBn76:5432981076:298298554433862020208620280654320205435432981076:543862980762980762806298054354329811076:5432980765438620543543298076298001298076298202980765432020:205432054329802980129805432018820205432981076:868685432981076:8688688688885435432981076:29805435432981076:9876````GnHdH`21Hf13201322111211211132021321321213213200132210132132113211111321320132102111320222132022222221320132132032Md000`````000HhHjHl10210210210210210210210I`432104321133313313332104321132132131321321004321321130321321032132132132133213213213213343332132132132103213321321321111111113332104111132104111111111111111111113210432104321213`Mf`000`````0000IdIhIf21021021021021Jb132Jd5124305113243243243222322312224311243051324324324323243112430051243132101243243243224312252121243123333333322312430533331243053333331124305243112430543````Mh00```00```00JfJjJhJl32K`KbKdJn54Kf9874321650944332275111517154321143287432165094327516516515871654328743216500943287165432751432087432165871651165432119143214328716587165432111874321650955758743216509757557575432874321650943287432165098765`````KhKjKnKl32L`214302223111311321121430223143131432143002223120143222121111221432111143023314302321430221430243`LbLn00`0````0`````0`00``IbLfJ`nHbLhIlIjAfIn83:9876543210:987654321088877665544332211009987654321098765432109876543210998765432108765432108765432109Ll81;:987654321;:98876543211987654321987654321;:987654321987654321:54876874321547629Fd873;<:98765432;:98765432;;:98765432;:98765432;54432<;;;:98765432<;:98765432:98765432<;:98765432:9876543298732<;:98765432;;","f":"```````````````````````````{{{d{b}}}{{d{f}}}}{df}{{{d{h}}}{{d{f}}}}1{d{{d{c}}}{}}0000000000{{{d{j}}}{{d{jc}}}{}}0000000000{{{d{jl}}nA`}Ab}{{{d{jb}}nA`}Ab}{{{d{jAd}}nA`}Ab}{{{d{jl}}nA`AfA`}Ab}{{{d{jb}}nA`AfA`}Ab}{{{d{jAd}}nA`AfA`}Ab}{{}Ah}00000{{{d{Ad}}}f}{{{d{Aj}}}f}{{}{{B`{{An{Al}}}}}}0{{{d{Bb}}}}0{{{d{Bb}}c}{}Bd}0{{{d{Bb}}}Bf}0{{}{{B`{Bh}}}}0{{{d{l}}}{{Bl{Bj}}}}{{{d{Ad}}}{{d{Bb}}}}{{{d{Bn}}}{{Bl{Bj}}}}{{{d{Aj}}}{{d{Bb}}}}{{{d{C`}}{d{C`}}}Cb}{{{d{Cd}}{d{Cd}}}Cb}{{{d{Cf}}{d{Cf}}}Cb}{{}{{Cl{ChCj}}}}0{{}{{B`{Cn}}}}0{{{d{C`}}{d{jD`}}}Db}{{{d{Cd}}{d{jD`}}}Db}{{{d{Cf}}{d{jD`}}}Db}{cc{}}0000000000{{{d{{Df{Dd}}}}}{{Dl{{Dh{C`{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Cd{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Cf{d{{Df{Dd}}}}}}Dj}}}}{{{d{Ad}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{Aj}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{jl}}{d{Ef}}{d{f}}}Ab}{{{d{jb}}{d{Ef}}{d{f}}}Ab}{{{d{jAd}}{d{Ef}}{d{f}}}Ab}{{{d{jBn}}{d{Ef}}{d{f}}}Ab}{{{d{jh}}{d{Ef}}{d{f}}}Ab}{{{d{jAj}}{d{Ef}}{d{f}}}Ab}{{{d{l}}{d{Ef}}{d{f}}}Cb}{{{d{b}}{d{Ef}}{d{f}}}Cb}{{{d{Ad}}{d{Ef}}{d{f}}}Cb}{{{d{Bn}}{d{Ef}}{d{f}}}Cb}{{{d{h}}{d{Ef}}{d{f}}}Cb}{{{d{Aj}}{d{Ef}}{d{f}}}Cb}{{}Ch}000{{{d{jl}}fEhf}Ab}{{{d{jb}}fEhf}Ab}{{{d{jAd}}fEhf}Ab}{{{d{jBn}}Ehf}Ab}{{{d{Ej}}{d{jEl}}}Ab}00{{}c{}}000000{EnEl}1111{{}Cn}00{{{d{l}}}Cb}{{{d{b}}}Cb}{{{d{Ad}}}Cb}{{{d{Bn}}}Cb}{{{d{h}}}Cb}{{{d{Aj}}}Cb}{{}Cb}00{{{d{Ad}}}F`}{{{d{Aj}}}F`}{{{d{Bb}}f}}0{{}Ch}00{{ChfFb}C`}{EhCd}{fCf}{{{Bl{Bj}}}l}{{{Bl{Bj}}f}b}{{fBb}Ad}{{{Bl{Bj}}}Bn}{{{Bl{Bj}}f}h}{{fBb}Aj}{{{d{jl}}}Ab}{{{d{jb}}}Ab}{{{d{jAd}}}Ab}{{{d{jBn}}}Ab}{{{d{Bn}}{d{c}}A`}Ab{FdFf}}`{{{d{jl}}AfA`}Ab}{{{d{jb}}AfA`}Ab}{{{d{jAd}}AfA`}Ab}{{{d{Bn}}}Ab}{{{d{h}}}Ab}{{{d{Aj}}}Ab}{{{d{l}}Ch}{{An{f}}}}{{{d{b}}Ch}{{An{f}}}}{{{d{Ad}}Ch}{{An{f}}}}{{dc}Fh{{Fl{Fj}}}}0{{{d{jl}}{d{Ef}}{d{f}}}Ab}{{{d{jb}}{d{Ef}}{d{f}}}Ab}{{{d{jAd}}{d{Ef}}{d{f}}}Ab}{{{d{jBn}}{d{Ef}}{d{f}}}Ab}{{{d{jh}}{d{Ef}}{d{f}}}Ab}{{{d{jAj}}{d{Ef}}{d{f}}}Ab}{{}Cj}00{{}{{B`{Fn}}}}0{{}{{B`{G`}}}}00{{}{{B`{Gb}}}}0{{}{{B`{{An{Al}}}}}}0000{{{d{C`}}}Gd}{{{d{Cd}}}Gd}{{{d{Cf}}}Gd}{{{d{jl}}Eh}Ab}{{{d{jb}}Eh}Ab}{{{d{jAd}}Eh}Ab}{{{d{jBn}}Eh}Ab}{{{d{jl}}f}Ab}{{{d{jb}}f}Ab}{{{d{jAd}}f}Ab}{{{d{jBn}}f}Ab}`{{{d{l}}}Eh}{{{d{b}}}Eh}{{{d{Ad}}}Eh}{{{d{Bn}}}Eh}{{{d{C`}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Cd}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Cf}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}0`{{{d{jAd}}nA`}{{Gh{Ab}}}}{{{d{jAd}}nA`AfA`}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}0{{{d{Bb}}c}{{Dl{Fj}}}Bd}0{c{{Dl{e}}}{}{}}0000000000{{{d{jAd}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{jAj}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Ad}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{Aj}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jAd}}fEhf}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}0000000000{{{d{Ad}}}{{Gh{Cb}}}}{{{d{Aj}}}{{Gh{Cb}}}}{{{d{jAd}}}{{Gh{Ab}}}}{{{d{jAd}}AfA`}{{Gh{Ab}}}}{{{d{Aj}}}{{Gh{Ab}}}}{{{d{Ad}}Ch}{{Gh{{An{f}}}}}};:{{{d{jAd}}Eh}{{Gh{Ab}}}}{{{d{jAd}}f}{{Gh{Ab}}}}{{{d{Ad}}}{{Gh{Eh}}}}6{{}Gj}00{dGl}0000000000{{{d{jl}}}Ab}{{{d{jb}}}Ab}{{{d{jAd}}}Ab}{{{d{jBn}}}Ab}{{{An{c}}{d{Bj}}}c{}}00{{}c{}}0000000000{{{d{b}}Fb}b}{{{d{Ad}}Fb}Ad}{{{d{h}}Fb}h}{{{d{Aj}}Fb}Aj}````{{{d{Gn}}}{{d{f}}}}{df}{d{{d{c}}}{}}000{{{d{j}}}{{d{jc}}}{}}000{{{d{jH`}}HbA`}Ab}{{{d{jGn}}HbA`}Ab}{{{d{jHd}}HbA`}Ab}{{{d{Hd}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{H`}}}{{Bl{Bj}}}}{{{d{Hd}}}{{d{Bb}}}}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{cc{}}000{{{d{Hd}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{jH`}}{d{Ef}}{d{f}}}Ab}{{{d{jGn}}{d{Ef}}{d{f}}}Ab}{{{d{jHd}}{d{Ef}}{d{f}}}Ab}{{{d{H`}}{d{Ef}}{d{f}}}Cb}{{{d{Gn}}{d{Ef}}{d{f}}}Cb}{{{d{Hd}}{d{Ef}}{d{f}}}Cb}{{}Ch}0{{{d{jH`}}Ehff}Ab}{{{d{jGn}}Ehff}Ab}{{{d{jHd}}Ehff}Ab}{{}c{}}00{HfEl}1{{{d{H`}}}Cb}{{{d{Gn}}}Cb}{{{d{Hd}}}Cb}{{{d{Hd}}}F`}{{{d{Bb}}f}}`{{{Bl{Bj}}}H`}{{{Bl{Bj}}f}Gn}{{fBb}Hd}{{{d{jH`}}}Ab}{{{d{jGn}}}Ab}{{{d{jHd}}}Ab}{{dc}Fh{{Fl{Fj}}}}{{{d{jH`}}{d{Ef}}{d{f}}}Ab}{{{d{jGn}}{d{Ef}}{d{f}}}Ab}{{{d{jHd}}{d{Ef}}{d{f}}}Ab}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}{{{d{jH`}}Eh}Ab}{{{d{jGn}}Eh}Ab}{{{d{jHd}}Eh}Ab}{{{d{jH`}}f}Ab}{{{d{jGn}}f}Ab}{{{d{jHd}}f}Ab}`{{{d{H`}}}Eh}{{{d{Gn}}}Eh}{{{d{Hd}}}Eh}{{dCh}Gf}`{{{d{jHd}}HbA`}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}000{{{d{jHd}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Hd}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jHd}}Ehff}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}000{{{d{Hd}}}{{Gh{Cb}}}}{{{d{jHd}}}{{Gh{Ab}}}}5{{{d{jHd}}Eh}{{Gh{Ab}}}}{{{d{jHd}}f}{{Gh{Ab}}}}{{{d{Hd}}}{{Gh{Eh}}}}3{dGl}000{{{d{jH`}}}Ab}{{{d{jGn}}}Ab}{{{d{jHd}}}Ab}{{}c{}}000{{{d{Gn}}Fb}Gn}{{{d{Hd}}Fb}Hd}````````````{{{d{jHh}}}Ab}{{{d{jHj}}}Ab}{{{d{jHl}}}Ab}{{{d{Hj}}}{{d{f}}}}{df}{{{d{jHh}}f{B`{Gf}}}Ab}{{{d{jHj}}f{B`{Gf}}}Ab}{{{d{jHl}}f{B`{Gf}}}Ab}{{{d{jHh}}fGf}Ab}{{{d{jHj}}fGf}Ab}{{{d{jHl}}fGf}Ab}{{{d{jHh}}f}Ab}{{{d{jHj}}f}Ab}{{{d{jHl}}f}Ab}{{{d{Hh}}Gf}{{An{f}}}}{{{d{Hj}}Gf}{{An{f}}}}{{{d{Hl}}Gf}{{An{f}}}}{{{d{Hh}}Gff}Ab}{{{d{Hj}}Gff}Ab}{{{d{Hl}}Gff}Ab}{{{d{Hh}}f}Gf}{{{d{Hj}}f}Gf}{{{d{Hl}}f}Gf}{d{{d{c}}}{}}0000{{{d{j}}}{{d{jc}}}{}}0000{{{d{jHh}}Gf}Ab}{{{d{jHj}}Gf}Ab}{{{d{jHl}}Gf}Ab}{{{d{Hl}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{Hh}}}{{Bl{Bj}}}}{{{d{Hl}}}{{d{Bb}}}}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{cc{}}0000{{{d{Hh}}}f}{{{d{Hj}}}f}<{{{d{Hl}}Dn}{{Dl{cE`}}}{EbEd}}21={{{d{Hh}}}{{An{f}}}}{{{d{Hj}}}{{An{f}}}}{{{d{Hl}}}{{An{f}}}}{{}Ch}0{{{d{jHh}}ChChHn}Ab}{{{d{jHj}}ChChHn}Ab}{{{d{jHl}}ChChHn}Ab}{{}c{}}00{I`El}11{{{d{Hh}}ff}Cb}{{{d{Hj}}ff}Cb}{{{d{Hl}}ff}Cb}{{{d{Hh}}Gf}Cb}{{{d{Hj}}Gf}Cb}{{{d{Hl}}Gf}Cb}{{{d{Hl}}}F`}{{{d{Bb}}f}}`{{{d{jHh}}fGf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHj}}fGf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHl}}fGf{B`{{Dh{ChCh}}}}}Ab}{{{d{Hh}}}Ch}{{{d{Hj}}}Ch}{{{d{Hl}}}Ch}`{{{Bl{Bj}}}Hh}{{{Bl{Bj}}f}Hj}{{fBb}Hl}{{{d{Hh}}Gf}{{An{f}}}}{{{d{Hj}}Gf}{{An{f}}}}{{{d{Hl}}Gf}{{An{f}}}}{{{d{jHh}}}Ab}{{{d{jHj}}}Ab}{{{d{jHl}}}Ab}543{{dc}Fh{{Fl{Fj}}}}{{{d{jHh}}Gf}Ab}{{{d{jHj}}Gf}Ab}{{{d{jHl}}Gf}Ab}{{{d{jHh}}f}Ab}{{{d{jHj}}f}Ab}{{{d{jHl}}f}Ab}210{{{d{jHh}}ffGf{An{A`}}}Ab}{{{d{jHj}}ffGf{An{A`}}}Ab}{{{d{jHl}}ffGf{An{A`}}}Ab}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}0{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}987{{{d{jHh}}Gff}Ab}{{{d{jHj}}Gff}Ab}{{{d{jHl}}Gff}Ab}{{{d{jHh}}Gf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHj}}Gf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHl}}Gf{B`{{Dh{ChCh}}}}}Ab}{{{d{Hh}}}Ch}{{{d{Hj}}}Ch}{{{d{Hl}}}Ch}`{{{d{Hh}}Gf}Cb}{{{d{Hj}}Gf}Cb}{{{d{Hl}}Gf}Cb}{{dCh}Gf}{{{d{Hh}}Gf}{{B`{{Dh{ChCh}}}}}}{{{d{Hj}}Gf}{{B`{{Dh{ChCh}}}}}}{{{d{Hl}}Gf}{{B`{{Dh{ChCh}}}}}}{{{d{jHh}}ffGf}Ab}{{{d{jHj}}ffGf}Ab}{{{d{jHl}}ffGf}Ab}{{{d{jHh}}{d{f}}}Ab}{{{d{jHj}}{d{f}}}Ab}{{{d{jHl}}{d{f}}}Ab}{{{d{jHl}}}{{Gh{Ab}}}}{{{d{jHl}}f{B`{Gf}}}{{Gh{Ab}}}}{{{d{jHl}}fGf}{{Gh{Ab}}}}{{{d{jHl}}f}{{Gh{Ab}}}}{{{d{Hl}}Gf}{{Gh{{An{f}}}}}}{{{d{Hl}}Gff}{{Gh{Ab}}}}{{{d{Hl}}f}{{Gh{Gf}}}}{{{d{jHl}}Gf}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}0000{{{d{Hl}}}{{Gh{f}}}}0{{{d{Hl}}}{{Gh{{An{f}}}}}}{{{d{jHl}}ChChHn}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}0000{{{d{Hl}}ff}{{Gh{Cb}}}}{{{d{Hl}}Gf}{{Gh{Cb}}}}{{{d{jHl}}fGf{B`{{Dh{ChCh}}}}}{{Gh{Ab}}}}{{{d{Hl}}}{{Gh{Ch}}}}>{{{d{jHl}}}{{Gh{Ab}}}}?<{{{d{jHl}}f}{{Gh{Ab}}}}0{{{d{jHl}}ffGf{An{A`}}}{{Gh{Ab}}}}1{{{d{jHl}}Gff}{{Gh{Ab}}}}{{{d{jHl}}Gf{B`{{Dh{ChCh}}}}}{{Gh{Ab}}}}57{{{d{Hl}}Gf}{{Gh{{B`{{Dh{ChCh}}}}}}}}{{{d{jHl}}ffGf}{{Gh{Ab}}}}{{{d{jHl}}{d{f}}}{{Gh{Ab}}}}6{dGl}0000{{}c{}}0000{{{d{jHh}}f}Ab}{{{d{jHj}}f}Ab}{{{d{jHl}}f}Ab}{{{d{Hj}}Fb}Hj}{{{d{Hl}}Fb}Hl}{{{d{Hh}}Gf}Ib}```````````````{{{d{Id}}}{{d{f}}}}{df}{{{d{jIf}}{B`{Gf}}}Ab}{{{d{jId}}{B`{Gf}}}Ab}{{{d{jIh}}{B`{Gf}}}Ab}{{{d{jIf}}{B`{Ij}}}Ab}{{{d{jId}}{B`{Ij}}}Ab}{{{d{jIh}}{B`{Ij}}}Ab}{{{d{jIf}}{B`{Ij}}{B`{Il}}}Ab}{{{d{jId}}{B`{Ij}}{B`{Il}}}Ab}{{{d{jIh}}{B`{Ij}}{B`{Il}}}Ab}{{{d{jIf}}{B`{Il}}}Ab}{{{d{jId}}{B`{Il}}}Ab}{{{d{jIh}}{B`{Il}}}Ab}{{{d{jIf}}f{B`{Gf}}}Ab}{{{d{jId}}f{B`{Gf}}}Ab}{{{d{jIh}}f{B`{Gf}}}Ab}{d{{d{c}}}{}}00000{{{d{j}}}{{d{jc}}}{}}00000{{}Ah}0{{{d{Ih}}}f}{{{d{jIf}}In}Ab}{{{d{jId}}In}Ab}{{{d{jIh}}In}Ab}{{{d{jIf}}InJ`}Ab}{{{d{jId}}InJ`}Ab}{{{d{jIh}}InJ`}Ab}{{{d{jIf}}J`}Ab}{{{d{jId}}J`}Ab}{{{d{jIh}}J`}Ab}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{If}}}{{Bl{Bj}}}}{{{d{Ih}}}{{d{Bb}}}}{{{d{Jb}}{d{Jb}}}Cb}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{{{d{jIf}}{B`{Gf}}}Ab}{{{d{jId}}{B`{Gf}}}Ab}{{{d{jIh}}{B`{Gf}}}Ab}{{{d{Jb}}{d{jD`}}}Db}{cc{}}00000{{{d{{Df{Dd}}}}}{{Dl{{Dh{Jb{d{{Df{Dd}}}}}}Dj}}}}{{{d{Ih}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{If}}}Hn}{{{d{Id}}}Hn}{{{d{Ih}}}Hn}{{{d{jIf}}{d{Ef}}{d{f}}}Ab}{{{d{jId}}{d{Ef}}{d{f}}}Ab}{{{d{jIh}}{d{Ef}}{d{f}}}Ab}{{{d{If}}{d{Ef}}{d{f}}}Cb}{{{d{Id}}{d{Ef}}{d{f}}}Cb}{{{d{Ih}}{d{Ef}}{d{f}}}Cb}{{}Ch}0{{{d{jIf}}f}Ab}{{{d{jId}}f}Ab}{{{d{jIh}}f}Ab}{{{d{Ej}}{d{jEl}}}Ab}{{}c{}}0000{JdEl}1{{}Cn}{{{d{If}}}Cb}{{{d{Id}}}Cb}{{{d{Ih}}}Cb}{{}Cb}{{{d{Ih}}}F`}{{{d{Bb}}f}}=`{HnJb}{{{Bl{Bj}}}If}{{{Bl{Bj}}f}Id}{{fBb}Ih}{{{d{jIf}}}Ab}{{{d{jId}}}Ab}{{{d{jIh}}}Ab}{{{d{If}}Ch}{{An{f}}}}{{{d{Id}}Ch}{{An{f}}}}{{{d{Ih}}Ch}{{An{f}}}}{{dc}Fh{{Fl{Fj}}}}{{{d{jIf}}{d{Ef}}{d{f}}}Ab}{{{d{jId}}{d{Ef}}{d{f}}}Ab}{{{d{jIh}}{d{Ef}}{d{f}}}Ab}{{}Cj}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}0{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}0{{{d{Jb}}}Gd}{{{d{jIf}}Hn}Ab}{{{d{jId}}Hn}Ab}{{{d{jIh}}Hn}Ab}{{{d{Jb}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}{{{d{jIh}}{B`{Gf}}}{{Gh{Ab}}}}{{{d{jIh}}{B`{Ij}}}{{Gh{Ab}}}}{{{d{jIh}}{B`{Ij}}{B`{Il}}}{{Gh{Ab}}}}{{{d{jIh}}{B`{Il}}}{{Gh{Ab}}}}{{{d{jIh}}f{B`{Gf}}}{{Gh{Ab}}}}{{{d{jIh}}In}{{Gh{Ab}}}}{{{d{jIh}}InJ`}{{Gh{Ab}}}}{{{d{jIh}}J`}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}9{c{{Dl{e}}}{}{}}00000{{{d{Ih}}}{{Gh{Hn}}}}{{{d{jIh}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Ih}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jIh}}f}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}00000{{{d{Ih}}}{{Gh{Cb}}}}{{{d{jIh}}}{{Gh{Ab}}}}{{{d{Ih}}Ch}{{Gh{{An{f}}}}}}6{{{d{jIh}}Hn}{{Gh{Ab}}}}2{{}Gj}{dGl}00000{{{d{jIf}}}Ab}{{{d{jId}}}Ab}{{{d{jIh}}}Ab}{{{An{c}}{d{Bj}}}c{}}{{}c{}}00000{{{d{Id}}Fb}Id}{{{d{Ih}}Fb}Ih}`````````````````{{{d{Jf}}}{{d{f}}}}{df}{{{d{Jh}}}{{d{f}}}}1{d{{d{c}}}{}}000000000{{{d{j}}}{{d{jc}}}{}}000000000{{}Ah}00000{{{d{Jj}}}f}{{{d{Jl}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{Jj}}}{{d{Bb}}}}{{{d{Jn}}}{{Bl{Bj}}}}{{{d{Jl}}}{{d{Bb}}}}{{{d{K`}}{d{K`}}}Cb}{{{d{Kb}}{d{Kb}}}Cb}{{{d{Kd}}{d{Kd}}}Cb}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{{{d{K`}}{d{jD`}}}Db}{{{d{Kb}}{d{jD`}}}Db}{{{d{Kd}}{d{jD`}}}Db}{cc{}}000000000{{{d{{Df{Dd}}}}}{{Dl{{Dh{K`{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Kb{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Kd{d{{Df{Dd}}}}}}Dj}}}}{{{d{Jj}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{Jl}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{jJn}}{d{Ef}}{d{f}}}Ab}{{{d{jJh}}{d{Ef}}{d{f}}}Ab}{{{d{jJl}}{d{Ef}}{d{f}}}Ab}{{{d{Jn}}{d{Ef}}{d{f}}}Cb}{{{d{Jh}}{d{Ef}}{d{f}}}Cb}{{{d{Jl}}{d{Ef}}{d{f}}}Cb}{{}Ch}0{{{d{jJf}}f}Ab}{{{d{jJj}}f}Ab}{{{d{jJn}}f}Ab}{{{d{jJh}}f}Ab}{{{d{jJl}}f}Ab}{{{d{Ej}}{d{jEl}}}Ab}00{{}c{}}00000000{KfEl}1{{}Cn}00{{{d{jJf}}Gf}Ab}{{{d{jJj}}Gf}Ab}{{{d{jJn}}Gf}Ab}{{{d{jJh}}Gf}Ab}{{{d{jJl}}Gf}Ab}{{}Cb}00{{{d{Jj}}}F`}{{{d{Jl}}}F`}{{{d{Bb}}f}}{{}Ch}00`{{{Bl{Bj}}f}Jf}{{fBb}Jj}{{Ch{An{f}}}K`}{GfKb}{fKd}{{{Bl{Bj}}}Jn}{{{Bl{Bj}}f}Jh}{{fBb}Jl}{{{d{Jf}}Ch}{{An{f}}}}{{{d{Jj}}Ch}{{An{f}}}}{{{d{Jn}}Ch}{{An{f}}}}{{{d{Jh}}Ch}{{An{f}}}}{{{d{Jl}}Ch}{{An{f}}}}{{dc}Fh{{Fl{Fj}}}}{{{d{jJn}}{d{Ef}}{d{f}}}Ab}{{{d{jJh}}{d{Ef}}{d{f}}}Ab}{{{d{jJl}}{d{Ef}}{d{f}}}Ab}{{}Cj}00{{}{{B`{Fn}}}}{{}{{B`{G`}}}}0{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}000{{{d{K`}}}Gd}{{{d{Kb}}}Gd}{{{d{Kd}}}Gd}{{{d{jJf}}f}Ab}{{{d{jJj}}f}Ab}{{{d{jJn}}f}Ab}{{{d{jJh}}f}Ab}{{{d{jJl}}f}Ab}{{{d{jJf}}Ch{An{f}}}Ab}{{{d{jJj}}Ch{An{f}}}Ab}{{{d{jJn}}Ch{An{f}}}Ab}{{{d{jJh}}Ch{An{f}}}Ab}{{{d{jJl}}Ch{An{f}}}Ab}{{{d{K`}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Kb}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Kd}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}000000000{{{d{jJl}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Jl}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jJj}}f}{{Gh{Ab}}}}{{{d{jJl}}f}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}000000000{{{d{jJj}}Gf}{{Gh{Ab}}}}{{{d{jJl}}Gf}{{Gh{Ab}}}}{{{d{Jj}}Ch}{{Gh{{An{f}}}}}}{{{d{Jl}}Ch}{{Gh{{An{f}}}}}}865{{{d{jJj}}Ch{An{f}}}{{Gh{Ab}}}}{{{d{jJl}}Ch{An{f}}}{{Gh{Ab}}}}{{}Gj}00{dGl}000000000{{{An{c}}{d{Bj}}}c{}}00{{}c{}}000000000{{{d{Jf}}Fb}Jf}{{{d{Jj}}Fb}Jj}{{{d{Jh}}Fb}Jh}{{{d{Jl}}Fb}Jl}`````{{{d{Kh}}}{{d{f}}}}{df}`{d{{d{c}}}{}}0000{{{d{j}}}{{d{jc}}}{}}0000{{}Ah}0{{{d{Kj}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{Kl}}}{{Bl{Bj}}}}{{{d{Kj}}}{{d{Bb}}}}{{{d{Kn}}{d{Kn}}}Cb}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{{{d{Kn}}{d{jD`}}}Db}{cc{}}0000{{{d{{Df{Dd}}}}}{{Dl{{Dh{Kn{d{{Df{Dd}}}}}}Dj}}}}{{{d{Kj}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{Kl}}{d{f}}}{{An{Ch}}}}{{{d{Kh}}{d{f}}}{{An{Ch}}}}{{{d{Kj}}{d{f}}}{{An{Ch}}}}{{}Ch}0{{{d{jKl}}f}Ab}{{{d{jKh}}f}Ab}{{{d{jKj}}f}Ab}{{{d{Ej}}{d{jEl}}}Ab}{{}c{}}00{L`El}11{{}Cn}{{}Cb}{{{d{Kj}}}F`}{{{d{Bb}}f}}:`{{{Bl{Bj}}}Kl}{{{Bl{Bj}}f}Kh}{{fBb}Kj}{{f{An{Ch}}{An{Ch}}}Kn}``{{dc}Fh{{Fl{Fj}}}}{{}Cj}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}0{{{d{Kn}}}Gd}{{{d{jKl}}Ch}Ab}{{{d{jKh}}Ch}Ab}{{{d{jKj}}Ch}Ab}{{{d{Kn}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}0000{{{d{Kj}}{d{f}}}{{Gh{{An{Ch}}}}}}{{{d{jKj}}f}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}0000{{{d{jKj}}Ch}{{Gh{Ab}}}}{{}Gj}{dGl}0000{{{An{c}}{d{Bj}}}c{}}{{}c{}}0000{{{d{Kh}}Fb}Kh}{{{d{Kj}}Fb}Kj}`{{{d{Lb}}Ch}Gf}`````````````````````{{dLd}Ab}000000000``{d{{d{c}}}{}}0000000000{{{d{j}}}{{d{jc}}}{}}0000000000`{{}Ah}00000000000000000{{{d{jIb}}}Ab}{{{d{Ib}}}Ib}{{{d{Lf}}}Lf}{{{d{J`}}}J`}{{{d{n}}}n}{{{d{Hb}}}Hb}{{{d{Lh}}}Lh}{{{d{Il}}}Il}{{{d{Ij}}}Ij}{{{d{Af}}}Af}{{{d{In}}}In}{{d{d{jc}}}Ab{}}000000000{{dDd}Ab}000000000{c{{Dl{Ib}}}Lj}{{{d{Ib}}{d{Ib}}}Cb}{{{d{Lf}}{d{Lf}}}Cb}{{{d{J`}}{d{J`}}}Cb}{{{d{n}}{d{n}}}Cb}{{{d{Hb}}{d{Hb}}}Cb}{{{d{Lh}}{d{Lh}}}Cb}{{{d{Il}}{d{Il}}}Cb}{{{d{Ij}}{d{Ij}}}Cb}{{{d{Af}}{d{Af}}}Cb}{{{d{In}}{d{In}}}Cb}{{}{{Cl{ChCj}}}}00000000{{}{{B`{Cn}}}}00000000{{{d{Ib}}}Hn}{{{d{Ll}}}Hn}{{{d{J`}}}Hn}{{{d{In}}}Hn}{{{d{Ln}}{d{jD`}}}Db}{{{d{Ib}}{d{jD`}}}Db}{{{d{Lf}}{d{jD`}}}Db}{{{d{J`}}{d{jD`}}}Db}{{{d{n}}{d{jD`}}}Db}{{{d{Hb}}{d{jD`}}}Db}{{{d{Lh}}{d{jD`}}}Db}{{{d{Il}}{d{jD`}}}Db}{{{d{Ij}}{d{jD`}}}Db}{{{d{Af}}{d{jD`}}}Db}{{{d{In}}{d{jD`}}}Db}{cc{}}00{nJ`}11111111{AfIn}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Lf{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{J`{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{n{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Hb{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Lh{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Il{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Ij{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Af{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{In{d{{Df{Dd}}}}}}Dj}}}}{{{d{Ej}}{d{jEl}}}Ab}00000000{{}c{}}0000000000{{}Cb}00000000{{{d{Ib}}}Ch}`````{{{B`{Il}}Hn}J`}{{Fb{d{Ej}}f{B`{Il}}Hn}n}{{{d{Ej}}fHn{d{Ej}}}Il}{{GfHn}Ij}{{Fb{d{Ej}}f{B`{Ij}}Hn}Af}{{{B`{Ij}}Hn}In}``````{{{d{Fd}}}{{d{Lf}}}}{{{d{n}}}{{d{Lf}}}}{{{d{Hb}}}{{d{Lf}}}}{{{d{Af}}}{{d{Lf}}}}{{{d{Ib}}}{{Gh{{An{f}}}}}}{{}{{B`{G`}}}}{{}{{B`{{An{Al}}}}}}00000000{{{d{Ib}}c}DlM`}{{{d{Lf}}}Gd}{{{d{J`}}}Gd}{{{d{n}}}Gd}{{{d{Hb}}}Gd}{{{d{Lh}}}Gd}{{{d{Il}}}Gd}{{{d{Ij}}}Gd}{{{d{Af}}}Gd}{{{d{In}}}Gd}{{{d{jIb}}Hn}Ab}{{{d{jIb}}f}Ab}{{{d{Lf}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{J`}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{n}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Hb}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Lh}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Il}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Ij}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Af}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{In}}}{{Dl{{B`{Dd}}Dj}}}}{dc{}}000000000{{{d{Ib}}}{{B`{{Dh{ChCh}}}}}}`````{c{{Dl{e}}}{}{}}0{{{B`{{Dh{ChCh}}}}}{{Dl{Ibc}}}{}}{Ch{{Dl{Ibc}}}{}}222222222{{}{{Dl{c}}}{}}0000000000{{}Gj}00000000{dGl}0000000000{{{An{c}}{d{Bj}}}c{}}00000000`````{{}c{}}0000000000{{{d{Ej}}Hn{d{Ej}}}Ib}{{{d{Ej}}Hn{d{Ej}}f}Ib}","D":"CNn","p":[[5,"ControllerContractRef",9],[1,"reference",null,null,1],[6,"Address",1515],[5,"BaseControllerContractRef",9],[0,"mut"],[5,"Controller",9],[5,"PaymentVoucher",1174],[5,"Bytes",1516],[1,"unit"],[5,"ControllerHostRef",9,1517],[5,"RenewalPaymentVoucher",1174],[6,"CLType",1518],[5,"BaseControllerHostRef",9,1519],[6,"CustomType",1520],[6,"Option",1521,null,1],[5,"Vec",1522],[5,"HostEnv",1523],[10,"OdraConfig",1523],[5,"EntryPointsCaller",1524],[5,"Entrypoint",1525],[5,"ContractEnv",1526],[5,"Rc",1527,null,1],[5,"BaseController",9],[5,"PaymentFulfilled",9],[1,"bool"],[5,"SignerPublicKeyChanged",9],[5,"TreasuryAddressChanged",9],[5,"String",1528],[5,"Schema",1529],[5,"BTreeMap",1530],[5,"Event",1525],[5,"Formatter",1531],[8,"Result",1531],[1,"u8"],[1,"slice"],[1,"tuple",null,null,1],[6,"Error",1532],[6,"Result",1533,null,1],[1,"i32"],[6,"EventError",1534],[10,"FromBytes",1532],[10,"EventInstance",1535],[8,"Role",1536],[6,"PublicKey",1537],[1,"str"],[5,"RuntimeArgs",1538],[5,"ControllerInitArgs",9,1517],[5,"ContractCallResult",1539],[5,"U512",1540],[10,"Payment",1174],[10,"ToBytes",1532],[1,"never"],[6,"OdraError",1534],[10,"Into",1541,null,1],[5,"Entrypoint",1520],[5,"UserError",1520],[5,"Event",1520],[1,"usize"],[5,"U256",1540],[8,"OdraResult",1534],[6,"NamedCLType",1542],[5,"TypeId",1543],[5,"SecondaryMarketContractRef",311],[5,"SecondaryMarket",311],[5,"SecondarySaleVoucher",1174],[5,"SecondaryMarketHostRef",311,1544],[5,"SecondaryMarketInitArgs",311,1544],[5,"NameToken",425],[5,"NameTokenContractRef",425],[5,"NameTokenHostRef",425,1545],[1,"u64"],[5,"NameTokenInitArgs",425,1545],[5,"NameTokenMetadata",1174],[5,"RegistrarContractRef",641],[5,"Registrar",641],[5,"RegistrarHostRef",641,1546],[5,"TokenRenewalInfo",1174],[5,"NameMintInfo",1174],[5,"RenewalVoucher",1174],[5,"TokenizationVoucher",1174],[5,"GracePeriodChanged",641],[5,"RegistrarInitArgs",641,1546],[5,"ResolverContractRef",829],[5,"DefaultResolverContractRef",829],[5,"ResolverHostRef",829,1547],[5,"DefaultResolverHostRef",829,1548],[5,"DefaultResolver",829],[5,"ResolutionChanged",829],[5,"ResolutionCleared",829],[5,"NameTokenAddressChanged",829],[5,"DefaultResolverInitArgs",829,1548],[5,"ReverseResolverContractRef",1064],[5,"ReverseResolverHostRef",1064,1549],[5,"ReverseResolver",1064],[5,"PrimaryNameChanged",1064],[5,"ReverseResolverInitArgs",1064,1549],[10,"ToTokenId",1172],[5,"Private",1550],[5,"PaymentInfo",1174],[5,"NameTransferInfo",1174],[10,"Deserializer",1551],[10,"ExpirableVoucher",1174],[6,"NameTokenError",1174],[10,"Serializer",1552],[6,"ControllerError",9],[6,"NameTokenError",425],[6,"RegistrarError",641],[6,"ResolverError",829]],"r":[[11,1519],[17,1517],[18,1517],[28,1517],[30,1519],[36,1517],[37,1517],[40,1519],[47,1517],[48,1517],[51,1519],[55,1517],[58,1517],[65,1517],[66,1519],[73,1517],[74,1519],[78,1517],[80,1519],[96,1517],[97,1517],[100,1519],[105,1517],[106,1519],[109,1517],[112,1519],[115,1517],[118,1519],[120,1517],[122,1519],[125,1517],[135,1517],[136,1517],[137,1517],[140,1519],[147,1517],[150,1519],[154,1517],[155,1519],[166,1517],[169,1519],[172,1517],[175,1517],[178,1517],[181,1519],[184,1517],[189,1517],[192,1519],[213,1517],[217,1517],[219,1517],[222,1517],[229,1517],[230,1517],[231,1517],[241,1517],[242,1517],[245,1519],[247,1517],[248,1519],[249,1517],[250,1519],[251,1517],[257,1517],[258,1517],[261,1519],[263,1517],[264,1519],[265,1517],[266,1517],[267,1519],[268,1517],[269,1517],[270,1519],[271,1517],[272,1517],[273,1517],[274,1517],[283,1517],[284,1517],[287,1519],[291,1517],[301,1517],[302,1517],[305,1519],[308,1517],[310,1519],[313,1544],[314,1544],[316,1544],[319,1544],[320,1544],[323,1544],[324,1544],[327,1544],[328,1544],[332,1544],[335,1544],[340,1544],[341,1544],[342,1544],[345,1544],[348,1544],[350,1544],[353,1544],[356,1544],[357,1544],[358,1544],[361,1544],[362,1544],[364,1544],[367,1544],[370,1544],[374,1544],[381,1544],[384,1544],[385,1544],[388,1544],[390,1544],[391,1544],[396,1544],[397,1544],[398,1544],[399,1544],[400,1544],[403,1544],[404,1544],[405,1544],[406,1544],[407,1544],[408,1544],[409,1544],[410,1544],[411,1544],[414,1544],[415,1544],[418,1544],[421,1544],[422,1544],[424,1544],[432,1545],[433,1545],[439,1545],[441,1545],[444,1545],[447,1545],[450,1545],[453,1545],[456,1545],[459,1545],[462,1545],[463,1545],[467,1545],[468,1545],[472,1545],[473,1545],[477,1545],[480,1545],[485,1545],[486,1545],[490,1545],[491,1545],[494,1545],[497,1545],[499,1545],[502,1545],[505,1545],[506,1545],[507,1545],[511,1545],[514,1545],[515,1545],[517,1545],[520,1545],[523,1545],[524,1545],[527,1545],[530,1545],[533,1545],[536,1545],[540,1545],[543,1545],[546,1545],[549,1545],[557,1545],[560,1545],[563,1545],[566,1545],[567,1545],[570,1545],[574,1545],[577,1545],[580,1545],[581,1545],[582,1545],[583,1545],[584,1545],[585,1545],[586,1545],[587,1545],[588,1545],[593,1545],[594,1545],[596,1545],[597,1545],[598,1545],[599,1545],[602,1545],[603,1545],[605,1545],[606,1545],[607,1545],[608,1545],[609,1545],[610,1545],[611,1545],[612,1545],[613,1545],[614,1545],[615,1545],[616,1545],[617,1545],[618,1545],[619,1545],[620,1545],[621,1545],[622,1545],[623,1545],[624,1545],[627,1545],[628,1545],[632,1545],[633,1545],[637,1545],[639,1545],[650,1546],[651,1546],[657,1546],[660,1546],[663,1546],[666,1546],[669,1546],[672,1546],[676,1546],[677,1546],[682,1546],[683,1546],[687,1546],[690,1546],[693,1546],[696,1546],[700,1546],[703,1546],[709,1546],[714,1546],[715,1546],[718,1546],[721,1546],[724,1546],[727,1546],[729,1546],[732,1546],[737,1546],[738,1546],[739,1546],[744,1546],[746,1546],[749,1546],[753,1546],[756,1546],[759,1546],[763,1546],[774,1546],[777,1546],[778,1546],[779,1546],[780,1546],[781,1546],[782,1546],[783,1546],[784,1546],[787,1546],[791,1546],[792,1546],[794,1546],[795,1546],[796,1546],[797,1546],[801,1546],[802,1546],[804,1546],[805,1546],[806,1546],[807,1546],[808,1546],[809,1546],[814,1546],[815,1546],[819,1546],[824,1546],[825,1546],[828,1546],[831,1548],[832,1548],[843,1547],[847,1547],[849,1548],[851,1547],[857,1548],[858,1548],[861,1547],[867,1548],[868,1548],[876,1547],[877,1548],[881,1548],[883,1547],[885,1548],[895,1547],[901,1548],[902,1548],[907,1547],[908,1548],[911,1548],[914,1548],[916,1548],[918,1547],[921,1548],[926,1547],[932,1548],[933,1548],[934,1548],[940,1547],[943,1548],[947,1547],[948,1548],[953,1548],[955,1547],[961,1548],[963,1547],[966,1548],[970,1548],[986,1547],[989,1548],[991,1547],[994,1548],[1002,1547],[1008,1548],[1009,1548],[1011,1548],[1012,1548],[1013,1547],[1014,1548],[1016,1547],[1022,1548],[1023,1548],[1025,1547],[1026,1548],[1027,1547],[1028,1548],[1029,1548],[1030,1547],[1031,1548],[1032,1547],[1033,1548],[1038,1547],[1044,1548],[1045,1548],[1051,1547],[1057,1548],[1058,1548],[1061,1547],[1063,1548],[1067,1549],[1068,1549],[1070,1549],[1074,1549],[1075,1549],[1079,1549],[1080,1549],[1084,1549],[1088,1549],[1091,1549],[1098,1549],[1099,1549],[1102,1549],[1105,1549],[1107,1549],[1110,1549],[1114,1549],[1115,1549],[1116,1549],[1120,1549],[1123,1549],[1126,1549],[1140,1549],[1147,1549],[1148,1549],[1150,1549],[1151,1549],[1154,1549],[1155,1549],[1157,1549],[1161,1549],[1162,1549],[1167,1549],[1168,1549],[1171,1549]],"b":[[1446,"impl-TryFrom%3CVec%3C(String,+String)%3E%3E-for-NameTokenMetadata"],[1447,"impl-TryFrom%3CString%3E-for-NameTokenMetadata"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAPQDbgAAAAkADQABABQAAgAYAAEAHAAZADwAHwBnAAQAeAADAIAAAgCKAAAAjwACAJgACQClAAUAsAAAALoAAQDCABEA3AAAAOEABQDpAA4A/QAKABQBDQAmAREAPAEJAEkBCQBXAQAAXgEBAGYBAABrAQUAdAEAAHgBAwCCAQAAhgEBAIkBBQCSAQMAnQEDAKQBCQCwAQAAswECALkBBADHAQIAzQEWAOwBAADzAQEA+wEAAAECCAANAgMAFwIDACECAgAnAgQALwIFADgCBABAAgIATgIGAFkCBAByAhEAhQICAIoCAACNAgUAogIOALoCCQDHAgAAzgIBANkCAQDeAgAA5AIAAOYCAADqAgQA8AICAPkCAAD9AgcACAMBABIDAQAVAwUAHwMFACsDBgA1AwgAQgMCAEgDAQBLAwAATQMxAIkDBACUAwMAmwMCAKcDAACpAwQAsQMLAMADBADIAwAAzAMPAN8DAQDkAw8A+AMJAAsEHQAuBBoATgQBAFMEBQBcBAAAXwQIAGkECQB2BAgAgQQEAIcEDgCXBAQAoAQBAKYEAACoBAEArAR/AC8FAAA4BRIAVgWVAA==","P":[[31,"T"],[53,""],[71,"T"],[73,""],[91,"T"],[102,""],[105,"T"],[107,""],[130,"U"],[137,""],[138,"U"],[142,""],[174,"P"],[176,""],[185,"E"],[187,""],[234,"T"],[236,"U,T"],[247,""],[252,"U"],[263,""],[293,"T"],[296,"V"],[307,""],[317,"T"],[325,""],[331,"T"],[332,""],[338,"T"],[343,""],[354,"U"],[357,""],[358,"U"],[359,""],[371,"E"],[372,""],[393,"T"],[394,"U,T"],[398,""],[401,"U"],[405,""],[419,"V"],[423,""],[460,"T"],[470,""],[476,"T"],[477,""],[483,"T"],[488,""],[491,"T"],[492,""],[503,"U"],[506,""],[507,"U"],[509,""],[537,"E"],[538,""],[590,"T"],[591,"U,T"],[596,""],[600,"U"],[605,""],[630,"V"],[635,""],[673,"T"],[685,""],[699,"T"],[700,""],[711,"T"],[717,""],[718,"T"],[719,""],[734,"U"],[739,""],[740,"U"],[741,""],[760,"E"],[761,""],[786,"T"],[787,""],[788,"U,T"],[794,""],[798,"U"],[804,""],[820,"T"],[821,"V"],[827,""],[850,"T"],[870,""],[880,"T"],[881,""],[894,"T"],[904,""],[907,"T"],[909,""],[925,"U"],[934,""],[935,"U"],[936,""],[967,"E"],[968,""],[1000,"T"],[1001,"U,T"],[1011,""],[1015,"U"],[1025,""],[1047,"T"],[1050,"V"],[1060,""],[1072,"T"],[1082,""],[1087,"T"],[1088,""],[1096,"T"],[1101,""],[1102,"T"],[1103,""],[1112,"U"],[1115,""],[1116,"U"],[1118,""],[1130,"E"],[1131,""],[1144,"T"],[1145,"U,T"],[1150,""],[1152,"U"],[1157,""],[1164,"T"],[1165,"V"],[1170,""],[1207,"T"],[1230,""],[1259,"T"],[1269,""],[1279,"__D"],[1280,""],[1323,"T"],[1326,""],[1327,"T"],[1335,""],[1354,"U"],[1365,""],[1407,"__S"],[1408,""],[1428,"T"],[1438,""],[1444,"U,T"],[1446,"TryFrom::Error"],[1448,"U,T"],[1457,"U"],[1468,""],[1488,"T"],[1502,"V"],[1513,""]]}]]')); +var searchIndex = new Map(JSON.parse('[["casper_name_contracts",{"t":"CCCCCCCCCFFFPPFFGFFPPPFPPFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNONNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPFFGFFPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNSPFPPPFFGFFPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFPPPFFFPPFGFPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFFNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMPPPKPFGFFPKFFFFPFPPFFNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNOOOOOOMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNNNNNNNN","n":["contracts","data_structures","controller","marketplace","name_token","registrar","resolver","reverse_resolver","token_id","BaseController","BaseControllerContractRef","BaseControllerHostRef","BuyerMustBeCaller","ContractAddressExpected","Controller","ControllerContractRef","ControllerError","ControllerHostRef","ControllerInitArgs","FeeCollectorNotSet","InsufficientPayment","InvalidSignature","PaymentFulfilled","PaymentTooLarge","RegistrarNotSet","SignerPublicKeyChanged","TreasuryAddressChanged","address","","","","borrow","","","","","","","","","","","borrow_mut","","","","","","","","","","","buy","","","buy_and_renew","","","cl_type","","","","","","contract_address","","custom_types","","deploy","","deploy_with_cfg","","entry_points_caller","","entrypoints","","env","","","","eq","","","event_schemas","","events","","fmt","","","from","","","","","","","","","","","from_bytes","","","get_event","","grant_role","","","","","","has_role","","","","","","ident","","","","init","","","","insert_runtime_arg","","","into","","","","","","","","","","","","into_event","","","is_paused","","","","","","is_required","","","last_call","","load","","name","","","new","","","","","","","","","pause","","","","process_payment_voucher","registrar","renew","","","require_not_paused","","","resolve","","","revert","","revoke_role","","","","","","schema","","","schema_entrypoints","","schema_errors","","","schema_events","","schema_types","","","","","serialized_length","","","set_signer_public_key","","","","set_treasury","","","","signer","signer_public_key","","","","to_bytes","","","token_id","","treasury","try_buy","try_buy_and_renew","try_deploy","","try_deploy_with_cfg","","try_from","","","","","","","","","","","try_grant_role","","try_has_role","","try_init","try_into","","","","","","","","","","","try_is_paused","","try_pause","try_renew","try_require_not_paused","try_resolve","try_revoke_role","","try_set_signer_public_key","try_set_treasury","try_signer_public_key","try_unpause","ty","","","type_id","","","","","","","","","","","unpause","","","","unwrap","","","vzip","","","","","","","","","","","with_tokens","","","","SecondaryMarket","SecondaryMarketContractRef","SecondaryMarketHostRef","SecondaryMarketInitArgs","address","","borrow","","","","borrow_mut","","","","buy","","","contract_address","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","event_schemas","events","from","","","","get_event","grant_role","","","has_role","","","ident","","init","","","into","","","","","is_paused","","","last_call","load","name_token","new","","","pause","","","revert","revoke_role","","","schema_entrypoints","schema_errors","schema_events","schema_types","set_signer_public_key","","","set_treasury","","","signer","signer_public_key","","","token_id","treasury","try_buy","try_deploy","try_deploy_with_cfg","try_from","","","","try_grant_role","try_has_role","try_init","try_into","","","","try_is_paused","try_pause","try_revoke_role","try_set_signer_public_key","try_set_treasury","try_signer_public_key","try_unpause","type_id","","","","unpause","","","vzip","","","","with_tokens","","ExpiredTokenTransfer","InvalidResolver","InvalidTokenIdentifier","InvalidTokenOwner","NameToken","NameTokenContractRef","NameTokenError","NameTokenHostRef","NameTokenInitArgs","NotWhitelisted","TokenSupplyDepleted","WhitelistedAlready","accept_ownership","","","address","","admin_transfer","","","approve","","","approve_for_all","","","approved_for","","","assert_is_owner","","","balance_of","","","borrow","","","","","borrow_mut","","","","","burn","","","contract_address","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","event_schemas","events","from","","","","","get_default_resolver","","","get_event","get_owner","","","get_pending_owner","","","ident","","init","","","into","","","","","","is_approved_for_all","","","is_token_valid","","","last_call","load","max_supply","mint","","","name","","","","new","","","owner_of","","","renounce_ownership","","","resolver","","","revert","revoke_approval","","","revoke_approval_for_all","","","revoke_whitelist","","","safe_transfer_from","","","schema_entrypoints","schema_errors","","schema_events","schema_types","set_default_resolver","","","set_resolver","","","set_token_metadata","","","symbol","","","","token_exists","","","token_id","token_metadata","","","transfer_from","","","transfer_ownership","","","try_accept_ownership","try_admin_transfer","try_approve","try_approve_for_all","try_approved_for","try_assert_is_owner","try_balance_of","try_burn","try_deploy","try_deploy_with_cfg","try_from","","","","","try_get_default_resolver","try_get_owner","try_get_pending_owner","try_init","try_into","","","","","try_is_approved_for_all","try_is_token_valid","try_mint","try_name","try_owner_of","try_renounce_ownership","try_resolver","try_revoke_approval","try_revoke_approval_for_all","try_revoke_whitelist","try_safe_transfer_from","try_set_default_resolver","try_set_resolver","try_set_token_metadata","try_symbol","try_token_exists","try_token_metadata","try_transfer_from","try_transfer_ownership","try_whitelist","type_id","","","","","vzip","","","","","whitelist","","","with_tokens","","wrapped_metadata","CONTROLLER_ROLE","ExpirationDateInThePast","GracePeriodChanged","GracePeriodExpired","GracePeriodTooLong","NameTokenIsNotValid","Registrar","RegistrarContractRef","RegistrarError","RegistrarHostRef","RegistrarInitArgs","TokenDoesNotExist","TokenNameIsNotValid","TokenNotExpired","VoucherExpired","address","","admin_burn","","","admin_prolong","","","admin_prolong_and_register","","","admin_register","","","admin_transfer","","","borrow","","","","","","borrow_mut","","","","","","cl_type","","contract_address","controller_prolong","","","controller_prolong_and_register","","","controller_register","","","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","eq","event_schemas","events","expire","","","fmt","from","","","","","","from_bytes","get_event","grace_period","","","grant_role","","","has_role","","","ident","","init","","","insert_runtime_arg","into","","","","","","","into_event","is_paused","","","is_required","last_call","load","name","name_token","new","","","","pause","","","resolve","","","revert","revoke_role","","","schema","schema_entrypoints","schema_errors","","schema_events","schema_types","","serialized_length","set_grace_period","","","to_bytes","token_id","try_admin_burn","try_admin_prolong","try_admin_prolong_and_register","try_admin_register","try_admin_transfer","try_controller_prolong","try_controller_prolong_and_register","try_controller_register","try_deploy","try_deploy_with_cfg","try_expire","try_from","","","","","","try_grace_period","try_grant_role","try_has_role","try_init","try_into","","","","","","try_is_paused","try_pause","try_resolve","try_revoke_role","try_set_grace_period","try_unpause","ty","type_id","","","","","","unpause","","","unwrap","vzip","","","","","","with_tokens","","DefaultResolver","DefaultResolverContractRef","DefaultResolverHostRef","DefaultResolverInitArgs","InvalidDomain","InvalidSubdomainFormat","InvalidTokenName","NameTokenAddressChanged","ResolutionChanged","ResolutionCleared","ResolutionSetByInvalidOwner","ResolutionSetWithInvalidToken","ResolverContractRef","ResolverError","ResolverHostRef","UnauthorizedInvalidation","UnauthorizedTokenAddressUpdate","address","","","","borrow","","","","","","","","","","borrow_mut","","","","","","","","","","cl_type","","","","","","contract_address","","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","","eq","","","event_schemas","events","fmt","","","from","","","","","","","","","","from_bytes","","","get_event","","grant_role","","","has_role","","","ident","","init","","","","","insert_runtime_arg","","","into","","","","","","","","","","","into_event","","","invalidate_resolutions","","","","","is_required","","","last_call","","load","name","","","name_token","new","","","","","","","","resolve","","","","","revert","revoke_role","","","schema","","","schema_entrypoints","schema_errors","","schema_events","schema_types","","","","serialized_length","","","set_name_token","","","","","set_resolution","","","","","to_bytes","","","token_id","try_deploy","try_deploy_with_cfg","try_from","","","","","","","","","","try_grant_role","try_has_role","try_init","","try_into","","","","","","","","","","try_invalidate_resolutions","","try_resolve","","try_revoke_role","try_set_name_token","","try_set_resolution","","ty","","","type_id","","","","","","","","","","unwrap","","","vzip","","","","","","","","","","with_tokens","","","","PrimaryNameChanged","ReverseResolver","ReverseResolverContractRef","ReverseResolverHostRef","ReverseResolverInitArgs","address","","","borrow","","","","","borrow_mut","","","","","cl_type","","contract_address","custom_types","deploy","deploy_with_cfg","entry_points_caller","entrypoints","env","","eq","event_schemas","events","fmt","from","","","","","from_bytes","get_event","get_primary_name","","","ident","","init","","","insert_runtime_arg","into","","","","","","into_event","is_required","last_call","load","name","name_token","new","","","","new_primary_name","old_primary_name","revert","schema","schema_entrypoints","schema_errors","schema_events","schema_types","","serialized_length","set_primary_name","","","to_bytes","token_id","try_deploy","try_deploy_with_cfg","try_from","","","","","try_get_primary_name","try_init","try_into","","","","","try_set_primary_name","ty","type_id","","","","","unwrap","vzip","","","","","with_tokens","","ToTokenId","token_id","DeserializationError","EmptyLabel","EmptyTLD","ExpirableVoucher","InvalidMetadata","NameMintInfo","NameTokenError","NameTokenMetadata","NameTransferInfo","PastExpirationDate","Payment","PaymentInfo","PaymentVoucher","RenewalPaymentVoucher","RenewalVoucher","SLDDoesNotExist","SecondarySaleVoucher","SerializationError","TLDNotSupported","TokenRenewalInfo","TokenizationVoucher","__clone_box","","","","","","","","","","amount","asset_uri","borrow","","","","","","","","","","","borrow_mut","","","","","","","","","","","buyer","cl_type","","","","","","","","","","","","","","","","","","clear_resolver","clone","","","","","","","","","","clone_into","","","","","","","","","","clone_to_uninit","","","","","","","","","","deserialize","eq","","","","","","","","","","event_schemas","","","","","","","","","events","","","","","","","","","expiration","expiration_time","","","fmt","","","","","","","","","","","from","","","","","","","","","","","","","from_bytes","","","","","","","","","insert_runtime_arg","","","","","","","","","into","","","","","","","","","","","is_required","","","","","","","","","json","label","","names","","","new","","","","","","owner","","payment","","","payment_id","payment_info","","","","resolver","schema_errors","schema_types","","","","","","","","","serialize","serialized_length","","","","","","","","","set_expiration","set_resolver","to_bytes","","","","","","","","","to_owned","","","","","","","","","","to_vec","token_expiration","","token_id","tokens","","try_from","","","","","","","","","","","","","try_into","","","","","","","","","","","ty","","","","","","","","","type_id","","","","","","","","","","","unwrap","","","","","","","","","voucher_expiration","","","","","vzip","","","","","","","","","","","with_no_resolver","with_resolver"],"q":[[0,"casper_name_contracts"],[2,"casper_name_contracts::contracts"],[9,"casper_name_contracts::contracts::controller"],[311,"casper_name_contracts::contracts::marketplace"],[425,"casper_name_contracts::contracts::name_token"],[641,"casper_name_contracts::contracts::registrar"],[829,"casper_name_contracts::contracts::resolver"],[1064,"casper_name_contracts::contracts::reverse_resolver"],[1172,"casper_name_contracts::contracts::token_id"],[1174,"casper_name_contracts::data_structures"],[1515,"odra_core::address"],[1516,"casper_types::bytesrepr::bytes"],[1517,"casper_name_contracts::contracts::controller::__controller_test_parts"],[1518,"casper_types::cl_type"],[1519,"casper_name_contracts::contracts::controller::__base_controller_test_parts"],[1520,"casper_contract_schema"],[1521,"core::option"],[1522,"alloc::vec"],[1523,"odra_core::host"],[1524,"odra_core::entry_point_callback"],[1525,"odra_core::contract_def"],[1526,"odra_core::contract_env"],[1527,"alloc::rc"],[1528,"alloc::string"],[1529,"casper_event_standard::schema"],[1530,"alloc::collections::btree::map"],[1531,"core::fmt"],[1532,"casper_types::bytesrepr"],[1533,"core::result"],[1534,"odra_core::error"],[1535,"casper_event_standard"],[1536,"odra_modules::access::access_control"],[1537,"casper_types::crypto::asymmetric_key"],[1538,"casper_types::transaction::runtime_args"],[1539,"odra_core::call_result"],[1540,"casper_types::uint::macro_code"],[1541,"core::convert"],[1542,"casper_contract_schema::ty"],[1543,"core::any"],[1544,"casper_name_contracts::contracts::marketplace::__secondary_market_test_parts"],[1545,"casper_name_contracts::contracts::name_token::__name_token_test_parts"],[1546,"casper_name_contracts::contracts::registrar::__registrar_test_parts"],[1547,"casper_name_contracts::contracts::resolver::__resolver_test_parts"],[1548,"casper_name_contracts::contracts::resolver::__default_resolver_test_parts"],[1549,"casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts"],[1550,"dyn_clone::sealed"],[1551,"serde::de"],[1552,"serde::ser"]],"i":"````````````Mb0`````000`00``bAdhAjC`CdCfl76EnBn76:5432981076:298298554433862020208620280654320205435432981076:543862980762980762806298054354329811076:5432980765438620543543298076298001298076298202980765432020:205432054329802980129805432018820205432981076:868685432981076:8688688688885435432981076:29805435432981076:9876````GnHdH`21Hf13201322111211211132021321321213213200132210132132113211111321320132102111320222132022222221320132132032Md000`````000HhHjHl10210210210210210210210I`432104321133313313332104321132132131321321004321321130321321032132132132133213213213213343332132132132103213321321321111111113332104111132104111111111111111111113210432104321213`Mf`000`````0000IdIhIf21021021021021Jb132Jd5124305113243243243222322312224311243051324324324323243112430051243132101243243243224312252121243123333333322312430533331243053333331124305243112430543````Mh00```00```00JfJjJhJl32K`KbKdJn54Kf9874321650944332275111517154321143287432165094327516516515871654328743216500943287165432751432087432165871651165432119143214328716587165432111874321650955758743216509757557575432874321650943287432165098765`````KhKlKjKn32L`214302223111311321121430223143131432143002223120143222121111221432111143023314302321430221430243`LbLn00`0````0`````0`00``IbLfJ`nHbLhIlIjAfIn83:9876543210:987654321088877665544332211009987654321098765432109876543210998765432108765432108765432109Ll81;:987654321;:98876543211987654321987654321;:987654321987654321:54876874321547629Fd873;<:98765432;:98765432;;:98765432;:98765432;54432<;;;:98765432<;:98765432:98765432<;:98765432:9876543298732<;:98765432;;","f":"```````````````````````````{{{d{b}}}{{d{f}}}}{df}{{{d{h}}}{{d{f}}}}1{d{{d{c}}}{}}0000000000{{{d{j}}}{{d{jc}}}{}}0000000000{{{d{jl}}nA`}Ab}{{{d{jb}}nA`}Ab}{{{d{jAd}}nA`}Ab}{{{d{jl}}nA`AfA`}Ab}{{{d{jb}}nA`AfA`}Ab}{{{d{jAd}}nA`AfA`}Ab}{{}Ah}00000{{{d{Ad}}}f}{{{d{Aj}}}f}{{}{{B`{{An{Al}}}}}}0{{{d{Bb}}}}0{{{d{Bb}}c}{}Bd}0{{{d{Bb}}}Bf}0{{}{{B`{Bh}}}}0{{{d{l}}}{{Bl{Bj}}}}{{{d{Ad}}}{{d{Bb}}}}{{{d{Bn}}}{{Bl{Bj}}}}{{{d{Aj}}}{{d{Bb}}}}{{{d{C`}}{d{C`}}}Cb}{{{d{Cd}}{d{Cd}}}Cb}{{{d{Cf}}{d{Cf}}}Cb}{{}{{Cl{ChCj}}}}0{{}{{B`{Cn}}}}0{{{d{C`}}{d{jD`}}}Db}{{{d{Cd}}{d{jD`}}}Db}{{{d{Cf}}{d{jD`}}}Db}{cc{}}0000000000{{{d{{Df{Dd}}}}}{{Dl{{Dh{C`{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Cd{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Cf{d{{Df{Dd}}}}}}Dj}}}}{{{d{Ad}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{Aj}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{jl}}{d{Ef}}{d{f}}}Ab}{{{d{jb}}{d{Ef}}{d{f}}}Ab}{{{d{jAd}}{d{Ef}}{d{f}}}Ab}{{{d{jBn}}{d{Ef}}{d{f}}}Ab}{{{d{jh}}{d{Ef}}{d{f}}}Ab}{{{d{jAj}}{d{Ef}}{d{f}}}Ab}{{{d{l}}{d{Ef}}{d{f}}}Cb}{{{d{b}}{d{Ef}}{d{f}}}Cb}{{{d{Ad}}{d{Ef}}{d{f}}}Cb}{{{d{Bn}}{d{Ef}}{d{f}}}Cb}{{{d{h}}{d{Ef}}{d{f}}}Cb}{{{d{Aj}}{d{Ef}}{d{f}}}Cb}{{}Ch}000{{{d{jl}}fEhf}Ab}{{{d{jb}}fEhf}Ab}{{{d{jAd}}fEhf}Ab}{{{d{jBn}}Ehf}Ab}{{{d{Ej}}{d{jEl}}}Ab}00{{}c{}}000000{EnEl}1111{{}Cn}00{{{d{l}}}Cb}{{{d{b}}}Cb}{{{d{Ad}}}Cb}{{{d{Bn}}}Cb}{{{d{h}}}Cb}{{{d{Aj}}}Cb}{{}Cb}00{{{d{Ad}}}F`}{{{d{Aj}}}F`}{{{d{Bb}}f}}0{{}Ch}00{{ChfFb}C`}{EhCd}{fCf}{{{Bl{Bj}}}l}{{{Bl{Bj}}f}b}{{fBb}Ad}{{{Bl{Bj}}}Bn}{{{Bl{Bj}}f}h}{{fBb}Aj}{{{d{jl}}}Ab}{{{d{jb}}}Ab}{{{d{jAd}}}Ab}{{{d{jBn}}}Ab}{{{d{Bn}}{d{c}}A`}Ab{FdFf}}{Enf}{{{d{jl}}AfA`}Ab}{{{d{jb}}AfA`}Ab}{{{d{jAd}}AfA`}Ab}{{{d{Bn}}}Ab}{{{d{h}}}Ab}{{{d{Aj}}}Ab}{{{d{l}}Ch}{{An{f}}}}{{{d{b}}Ch}{{An{f}}}}{{{d{Ad}}Ch}{{An{f}}}}{{dc}Fh{{Fl{Fj}}}}0{{{d{jl}}{d{Ef}}{d{f}}}Ab}{{{d{jb}}{d{Ef}}{d{f}}}Ab}{{{d{jAd}}{d{Ef}}{d{f}}}Ab}{{{d{jBn}}{d{Ef}}{d{f}}}Ab}{{{d{jh}}{d{Ef}}{d{f}}}Ab}{{{d{jAj}}{d{Ef}}{d{f}}}Ab}{{}Cj}00{{}{{B`{Fn}}}}0{{}{{B`{G`}}}}00{{}{{B`{Gb}}}}0{{}{{B`{{An{Al}}}}}}0000{{{d{C`}}}Gd}{{{d{Cd}}}Gd}{{{d{Cf}}}Gd}{{{d{jl}}Eh}Ab}{{{d{jb}}Eh}Ab}{{{d{jAd}}Eh}Ab}{{{d{jBn}}Eh}Ab}{{{d{jl}}f}Ab}{{{d{jb}}f}Ab}{{{d{jAd}}f}Ab}{{{d{jBn}}f}Ab}{EnEh}{{{d{l}}}Eh}{{{d{b}}}Eh}{{{d{Ad}}}Eh}{{{d{Bn}}}Eh}{{{d{C`}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Cd}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Cf}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}0{Enf}{{{d{jAd}}nA`}{{Gh{Ab}}}}{{{d{jAd}}nA`AfA`}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}0{{{d{Bb}}c}{{Dl{Fj}}}Bd}0{c{{Dl{e}}}{}{}}0000000000{{{d{jAd}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{jAj}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Ad}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{Aj}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jAd}}fEhf}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}0000000000{{{d{Ad}}}{{Gh{Cb}}}}{{{d{Aj}}}{{Gh{Cb}}}}{{{d{jAd}}}{{Gh{Ab}}}}{{{d{jAd}}AfA`}{{Gh{Ab}}}}{{{d{Aj}}}{{Gh{Ab}}}}{{{d{Ad}}Ch}{{Gh{{An{f}}}}}};:{{{d{jAd}}Eh}{{Gh{Ab}}}}{{{d{jAd}}f}{{Gh{Ab}}}}{{{d{Ad}}}{{Gh{Eh}}}}6{{}Gj}00{dGl}0000000000{{{d{jl}}}Ab}{{{d{jb}}}Ab}{{{d{jAd}}}Ab}{{{d{jBn}}}Ab}{{{An{c}}{d{Bj}}}c{}}00{{}c{}}0000000000{{{d{b}}Fb}b}{{{d{Ad}}Fb}Ad}{{{d{h}}Fb}h}{{{d{Aj}}Fb}Aj}````{{{d{Gn}}}{{d{f}}}}{df}{d{{d{c}}}{}}000{{{d{j}}}{{d{jc}}}{}}000{{{d{jH`}}HbA`}Ab}{{{d{jGn}}HbA`}Ab}{{{d{jHd}}HbA`}Ab}{{{d{Hd}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{H`}}}{{Bl{Bj}}}}{{{d{Hd}}}{{d{Bb}}}}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{cc{}}000{{{d{Hd}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{jH`}}{d{Ef}}{d{f}}}Ab}{{{d{jGn}}{d{Ef}}{d{f}}}Ab}{{{d{jHd}}{d{Ef}}{d{f}}}Ab}{{{d{H`}}{d{Ef}}{d{f}}}Cb}{{{d{Gn}}{d{Ef}}{d{f}}}Cb}{{{d{Hd}}{d{Ef}}{d{f}}}Cb}{{}Ch}0{{{d{jH`}}Ehff}Ab}{{{d{jGn}}Ehff}Ab}{{{d{jHd}}Ehff}Ab}{{}c{}}00{HfEl}1{{{d{H`}}}Cb}{{{d{Gn}}}Cb}{{{d{Hd}}}Cb}{{{d{Hd}}}F`}{{{d{Bb}}f}}{Hff}{{{Bl{Bj}}}H`}{{{Bl{Bj}}f}Gn}{{fBb}Hd}{{{d{jH`}}}Ab}{{{d{jGn}}}Ab}{{{d{jHd}}}Ab}{{dc}Fh{{Fl{Fj}}}}{{{d{jH`}}{d{Ef}}{d{f}}}Ab}{{{d{jGn}}{d{Ef}}{d{f}}}Ab}{{{d{jHd}}{d{Ef}}{d{f}}}Ab}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}{{{d{jH`}}Eh}Ab}{{{d{jGn}}Eh}Ab}{{{d{jHd}}Eh}Ab}{{{d{jH`}}f}Ab}{{{d{jGn}}f}Ab}{{{d{jHd}}f}Ab}{HfEh}{{{d{H`}}}Eh}{{{d{Gn}}}Eh}{{{d{Hd}}}Eh}{{dCh}Gf}{Hff}{{{d{jHd}}HbA`}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}000{{{d{jHd}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Hd}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jHd}}Ehff}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}000{{{d{Hd}}}{{Gh{Cb}}}}{{{d{jHd}}}{{Gh{Ab}}}}5{{{d{jHd}}Eh}{{Gh{Ab}}}}{{{d{jHd}}f}{{Gh{Ab}}}}{{{d{Hd}}}{{Gh{Eh}}}}3{dGl}000{{{d{jH`}}}Ab}{{{d{jGn}}}Ab}{{{d{jHd}}}Ab}{{}c{}}000{{{d{Gn}}Fb}Gn}{{{d{Hd}}Fb}Hd}````````````{{{d{jHh}}}Ab}{{{d{jHj}}}Ab}{{{d{jHl}}}Ab}{{{d{Hj}}}{{d{f}}}}{df}{{{d{jHh}}f{B`{Gf}}}Ab}{{{d{jHj}}f{B`{Gf}}}Ab}{{{d{jHl}}f{B`{Gf}}}Ab}{{{d{jHh}}fGf}Ab}{{{d{jHj}}fGf}Ab}{{{d{jHl}}fGf}Ab}{{{d{jHh}}f}Ab}{{{d{jHj}}f}Ab}{{{d{jHl}}f}Ab}{{{d{Hh}}Gf}{{An{f}}}}{{{d{Hj}}Gf}{{An{f}}}}{{{d{Hl}}Gf}{{An{f}}}}{{{d{Hh}}Gff}Ab}{{{d{Hj}}Gff}Ab}{{{d{Hl}}Gff}Ab}{{{d{Hh}}f}Gf}{{{d{Hj}}f}Gf}{{{d{Hl}}f}Gf}{d{{d{c}}}{}}0000{{{d{j}}}{{d{jc}}}{}}0000{{{d{jHh}}Gf}Ab}{{{d{jHj}}Gf}Ab}{{{d{jHl}}Gf}Ab}{{{d{Hl}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{Hh}}}{{Bl{Bj}}}}{{{d{Hl}}}{{d{Bb}}}}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{cc{}}0000{{{d{Hh}}}f}{{{d{Hj}}}f}<{{{d{Hl}}Dn}{{Dl{cE`}}}{EbEd}}21={{{d{Hh}}}{{An{f}}}}{{{d{Hj}}}{{An{f}}}}{{{d{Hl}}}{{An{f}}}}{{}Ch}0{{{d{jHh}}ChChHn}Ab}{{{d{jHj}}ChChHn}Ab}{{{d{jHl}}ChChHn}Ab}{{}c{}}00{I`El}11{{{d{Hh}}ff}Cb}{{{d{Hj}}ff}Cb}{{{d{Hl}}ff}Cb}{{{d{Hh}}Gf}Cb}{{{d{Hj}}Gf}Cb}{{{d{Hl}}Gf}Cb}{{{d{Hl}}}F`}{{{d{Bb}}f}}{I`Hn}{{{d{jHh}}fGf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHj}}fGf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHl}}fGf{B`{{Dh{ChCh}}}}}Ab}{{{d{Hh}}}Ch}{{{d{Hj}}}Ch}{{{d{Hl}}}Ch}{I`Ch}{{{Bl{Bj}}}Hh}{{{Bl{Bj}}f}Hj}{{fBb}Hl}{{{d{Hh}}Gf}{{An{f}}}}{{{d{Hj}}Gf}{{An{f}}}}{{{d{Hl}}Gf}{{An{f}}}}{{{d{jHh}}}Ab}{{{d{jHj}}}Ab}{{{d{jHl}}}Ab}543{{dc}Fh{{Fl{Fj}}}}{{{d{jHh}}Gf}Ab}{{{d{jHj}}Gf}Ab}{{{d{jHl}}Gf}Ab}{{{d{jHh}}f}Ab}{{{d{jHj}}f}Ab}{{{d{jHl}}f}Ab}210{{{d{jHh}}ffGf{An{A`}}}Ab}{{{d{jHj}}ffGf{An{A`}}}Ab}{{{d{jHl}}ffGf{An{A`}}}Ab}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}0{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}987{{{d{jHh}}Gff}Ab}{{{d{jHj}}Gff}Ab}{{{d{jHl}}Gff}Ab}{{{d{jHh}}Gf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHj}}Gf{B`{{Dh{ChCh}}}}}Ab}{{{d{jHl}}Gf{B`{{Dh{ChCh}}}}}Ab}{{{d{Hh}}}Ch}{{{d{Hj}}}Ch}{{{d{Hl}}}Ch}{I`Ch}{{{d{Hh}}Gf}Cb}{{{d{Hj}}Gf}Cb}{{{d{Hl}}Gf}Cb}{{dCh}Gf}{{{d{Hh}}Gf}{{B`{{Dh{ChCh}}}}}}{{{d{Hj}}Gf}{{B`{{Dh{ChCh}}}}}}{{{d{Hl}}Gf}{{B`{{Dh{ChCh}}}}}}{{{d{jHh}}ffGf}Ab}{{{d{jHj}}ffGf}Ab}{{{d{jHl}}ffGf}Ab}{{{d{jHh}}{d{f}}}Ab}{{{d{jHj}}{d{f}}}Ab}{{{d{jHl}}{d{f}}}Ab}{{{d{jHl}}}{{Gh{Ab}}}}{{{d{jHl}}f{B`{Gf}}}{{Gh{Ab}}}}{{{d{jHl}}fGf}{{Gh{Ab}}}}{{{d{jHl}}f}{{Gh{Ab}}}}{{{d{Hl}}Gf}{{Gh{{An{f}}}}}}{{{d{Hl}}Gff}{{Gh{Ab}}}}{{{d{Hl}}f}{{Gh{Gf}}}}{{{d{jHl}}Gf}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}0000{{{d{Hl}}}{{Gh{f}}}}0{{{d{Hl}}}{{Gh{{An{f}}}}}}{{{d{jHl}}ChChHn}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}0000{{{d{Hl}}ff}{{Gh{Cb}}}}{{{d{Hl}}Gf}{{Gh{Cb}}}}{{{d{jHl}}fGf{B`{{Dh{ChCh}}}}}{{Gh{Ab}}}}{{{d{Hl}}}{{Gh{Ch}}}}>{{{d{jHl}}}{{Gh{Ab}}}}?<{{{d{jHl}}f}{{Gh{Ab}}}}0{{{d{jHl}}ffGf{An{A`}}}{{Gh{Ab}}}}1{{{d{jHl}}Gff}{{Gh{Ab}}}}{{{d{jHl}}Gf{B`{{Dh{ChCh}}}}}{{Gh{Ab}}}}57{{{d{Hl}}Gf}{{Gh{{B`{{Dh{ChCh}}}}}}}}{{{d{jHl}}ffGf}{{Gh{Ab}}}}{{{d{jHl}}{d{f}}}{{Gh{Ab}}}}6{dGl}0000{{}c{}}0000{{{d{jHh}}f}Ab}{{{d{jHj}}f}Ab}{{{d{jHl}}f}Ab}{{{d{Hj}}Fb}Hj}{{{d{Hl}}Fb}Hl}{{{d{Hh}}Gf}Ib}{{}Ef}``````````````{{{d{Id}}}{{d{f}}}}{df}{{{d{jIf}}{B`{Gf}}}Ab}{{{d{jId}}{B`{Gf}}}Ab}{{{d{jIh}}{B`{Gf}}}Ab}{{{d{jIf}}{B`{Ij}}}Ab}{{{d{jId}}{B`{Ij}}}Ab}{{{d{jIh}}{B`{Ij}}}Ab}{{{d{jIf}}{B`{Ij}}{B`{Il}}}Ab}{{{d{jId}}{B`{Ij}}{B`{Il}}}Ab}{{{d{jIh}}{B`{Ij}}{B`{Il}}}Ab}{{{d{jIf}}{B`{Il}}}Ab}{{{d{jId}}{B`{Il}}}Ab}{{{d{jIh}}{B`{Il}}}Ab}{{{d{jIf}}f{B`{Gf}}}Ab}{{{d{jId}}f{B`{Gf}}}Ab}{{{d{jIh}}f{B`{Gf}}}Ab}{d{{d{c}}}{}}00000{{{d{j}}}{{d{jc}}}{}}00000{{}Ah}0{{{d{Ih}}}f}{{{d{jIf}}In}Ab}{{{d{jId}}In}Ab}{{{d{jIh}}In}Ab}{{{d{jIf}}InJ`}Ab}{{{d{jId}}InJ`}Ab}{{{d{jIh}}InJ`}Ab}{{{d{jIf}}J`}Ab}{{{d{jId}}J`}Ab}{{{d{jIh}}J`}Ab}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{If}}}{{Bl{Bj}}}}{{{d{Ih}}}{{d{Bb}}}}{{{d{Jb}}{d{Jb}}}Cb}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{{{d{jIf}}{B`{Gf}}}Ab}{{{d{jId}}{B`{Gf}}}Ab}{{{d{jIh}}{B`{Gf}}}Ab}{{{d{Jb}}{d{jD`}}}Db}{cc{}}00000{{{d{{Df{Dd}}}}}{{Dl{{Dh{Jb{d{{Df{Dd}}}}}}Dj}}}}{{{d{Ih}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{If}}}Hn}{{{d{Id}}}Hn}{{{d{Ih}}}Hn}{{{d{jIf}}{d{Ef}}{d{f}}}Ab}{{{d{jId}}{d{Ef}}{d{f}}}Ab}{{{d{jIh}}{d{Ef}}{d{f}}}Ab}{{{d{If}}{d{Ef}}{d{f}}}Cb}{{{d{Id}}{d{Ef}}{d{f}}}Cb}{{{d{Ih}}{d{Ef}}{d{f}}}Cb}{{}Ch}0{{{d{jIf}}f}Ab}{{{d{jId}}f}Ab}{{{d{jIh}}f}Ab}{{{d{Ej}}{d{jEl}}}Ab}{{}c{}}0000{JdEl}1{{}Cn}{{{d{If}}}Cb}{{{d{Id}}}Cb}{{{d{Ih}}}Cb}{{}Cb}{{{d{Ih}}}F`}{{{d{Bb}}f}}={Jdf}{HnJb}{{{Bl{Bj}}}If}{{{Bl{Bj}}f}Id}{{fBb}Ih}{{{d{jIf}}}Ab}{{{d{jId}}}Ab}{{{d{jIh}}}Ab}{{{d{If}}Ch}{{An{f}}}}{{{d{Id}}Ch}{{An{f}}}}{{{d{Ih}}Ch}{{An{f}}}}{{dc}Fh{{Fl{Fj}}}}{{{d{jIf}}{d{Ef}}{d{f}}}Ab}{{{d{jId}}{d{Ef}}{d{f}}}Ab}{{{d{jIh}}{d{Ef}}{d{f}}}Ab}{{}Cj}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}0{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}0{{{d{Jb}}}Gd}{{{d{jIf}}Hn}Ab}{{{d{jId}}Hn}Ab}{{{d{jIh}}Hn}Ab}{{{d{Jb}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}{{{d{jIh}}{B`{Gf}}}{{Gh{Ab}}}}{{{d{jIh}}{B`{Ij}}}{{Gh{Ab}}}}{{{d{jIh}}{B`{Ij}}{B`{Il}}}{{Gh{Ab}}}}{{{d{jIh}}{B`{Il}}}{{Gh{Ab}}}}{{{d{jIh}}f{B`{Gf}}}{{Gh{Ab}}}}{{{d{jIh}}In}{{Gh{Ab}}}}{{{d{jIh}}InJ`}{{Gh{Ab}}}}{{{d{jIh}}J`}{{Gh{Ab}}}}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}9{c{{Dl{e}}}{}{}}00000{{{d{Ih}}}{{Gh{Hn}}}}{{{d{jIh}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Ih}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jIh}}f}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}00000{{{d{Ih}}}{{Gh{Cb}}}}{{{d{jIh}}}{{Gh{Ab}}}}{{{d{Ih}}Ch}{{Gh{{An{f}}}}}}6{{{d{jIh}}Hn}{{Gh{Ab}}}}2{{}Gj}{dGl}00000{{{d{jIf}}}Ab}{{{d{jId}}}Ab}{{{d{jIh}}}Ab}{{{An{c}}{d{Bj}}}c{}}{{}c{}}00000{{{d{Id}}Fb}Id}{{{d{Ih}}Fb}Ih}`````````````````{{{d{Jf}}}{{d{f}}}}{df}{{{d{Jh}}}{{d{f}}}}1{d{{d{c}}}{}}000000000{{{d{j}}}{{d{jc}}}{}}000000000{{}Ah}00000{{{d{Jj}}}f}{{{d{Jl}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{Jj}}}{{d{Bb}}}}{{{d{Jn}}}{{Bl{Bj}}}}{{{d{Jl}}}{{d{Bb}}}}{{{d{K`}}{d{K`}}}Cb}{{{d{Kb}}{d{Kb}}}Cb}{{{d{Kd}}{d{Kd}}}Cb}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{{{d{K`}}{d{jD`}}}Db}{{{d{Kb}}{d{jD`}}}Db}{{{d{Kd}}{d{jD`}}}Db}{cc{}}000000000{{{d{{Df{Dd}}}}}{{Dl{{Dh{K`{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Kb{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Kd{d{{Df{Dd}}}}}}Dj}}}}{{{d{Jj}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{Jl}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{jJn}}{d{Ef}}{d{f}}}Ab}{{{d{jJh}}{d{Ef}}{d{f}}}Ab}{{{d{jJl}}{d{Ef}}{d{f}}}Ab}{{{d{Jn}}{d{Ef}}{d{f}}}Cb}{{{d{Jh}}{d{Ef}}{d{f}}}Cb}{{{d{Jl}}{d{Ef}}{d{f}}}Cb}{{}Ch}0{{{d{jJf}}f}Ab}{{{d{jJj}}f}Ab}{{{d{jJn}}f}Ab}{{{d{jJh}}f}Ab}{{{d{jJl}}f}Ab}{{{d{Ej}}{d{jEl}}}Ab}00{{}c{}}00000000{KfEl}1{{}Cn}00{{{d{jJf}}Gf}Ab}{{{d{jJj}}Gf}Ab}{{{d{jJn}}Gf}Ab}{{{d{jJh}}Gf}Ab}{{{d{jJl}}Gf}Ab}{{}Cb}00{{{d{Jj}}}F`}{{{d{Jl}}}F`}{{{d{Bb}}f}}{{}Ch}00{Kff}{{{Bl{Bj}}f}Jf}{{fBb}Jj}{{Ch{An{f}}}K`}{GfKb}{fKd}{{{Bl{Bj}}}Jn}{{{Bl{Bj}}f}Jh}{{fBb}Jl}{{{d{Jf}}Ch}{{An{f}}}}{{{d{Jj}}Ch}{{An{f}}}}{{{d{Jn}}Ch}{{An{f}}}}{{{d{Jh}}Ch}{{An{f}}}}{{{d{Jl}}Ch}{{An{f}}}}{{dc}Fh{{Fl{Fj}}}}{{{d{jJn}}{d{Ef}}{d{f}}}Ab}{{{d{jJh}}{d{Ef}}{d{f}}}Ab}{{{d{jJl}}{d{Ef}}{d{f}}}Ab}{{}Cj}00{{}{{B`{Fn}}}}{{}{{B`{G`}}}}0{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}000{{{d{K`}}}Gd}{{{d{Kb}}}Gd}{{{d{Kd}}}Gd}{{{d{jJf}}f}Ab}{{{d{jJj}}f}Ab}{{{d{jJn}}f}Ab}{{{d{jJh}}f}Ab}{{{d{jJl}}f}Ab}{{{d{jJf}}Ch{An{f}}}Ab}{{{d{jJj}}Ch{An{f}}}Ab}{{{d{jJn}}Ch{An{f}}}Ab}{{{d{jJh}}Ch{An{f}}}Ab}{{{d{jJl}}Ch{An{f}}}Ab}{{{d{K`}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Kb}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Kd}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}000000000{{{d{jJl}}{d{Ef}}{d{f}}}{{Gh{Ab}}}}{{{d{Jl}}{d{Ef}}{d{f}}}{{Gh{Cb}}}}{{{d{jJj}}f}{{Gh{Ab}}}}{{{d{jJl}}f}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}000000000{{{d{jJj}}Gf}{{Gh{Ab}}}}{{{d{jJl}}Gf}{{Gh{Ab}}}}{{{d{Jj}}Ch}{{Gh{{An{f}}}}}}{{{d{Jl}}Ch}{{Gh{{An{f}}}}}}865{{{d{jJj}}Ch{An{f}}}{{Gh{Ab}}}}{{{d{jJl}}Ch{An{f}}}{{Gh{Ab}}}}{{}Gj}00{dGl}000000000{{{An{c}}{d{Bj}}}c{}}00{{}c{}}000000000{{{d{Jf}}Fb}Jf}{{{d{Jj}}Fb}Jj}{{{d{Jh}}Fb}Jh}{{{d{Jl}}Fb}Jl}`````{{{d{Kh}}}{{d{f}}}}{df}{Kjf}{d{{d{c}}}{}}0000{{{d{j}}}{{d{jc}}}{}}0000{{}Ah}0{{{d{Kl}}}f}{{}{{B`{{An{Al}}}}}}{{{d{Bb}}}}{{{d{Bb}}c}{}Bd}{{{d{Bb}}}Bf}{{}{{B`{Bh}}}}{{{d{Kn}}}{{Bl{Bj}}}}{{{d{Kl}}}{{d{Bb}}}}{{{d{Kj}}{d{Kj}}}Cb}{{}{{Cl{ChCj}}}}{{}{{B`{Cn}}}}{{{d{Kj}}{d{jD`}}}Db}{cc{}}0000{{{d{{Df{Dd}}}}}{{Dl{{Dh{Kj{d{{Df{Dd}}}}}}Dj}}}}{{{d{Kl}}Dn}{{Dl{cE`}}}{EbEd}}{{{d{Kn}}{d{f}}}{{An{Ch}}}}{{{d{Kh}}{d{f}}}{{An{Ch}}}}{{{d{Kl}}{d{f}}}{{An{Ch}}}}{{}Ch}0{{{d{jKn}}f}Ab}{{{d{jKh}}f}Ab}{{{d{jKl}}f}Ab}{{{d{Ej}}{d{jEl}}}Ab}{{}c{}}00{L`El}11{{}Cn}{{}Cb}{{{d{Kl}}}F`}{{{d{Bb}}f}}:{L`f}{{{Bl{Bj}}}Kn}{{{Bl{Bj}}f}Kh}{{fBb}Kl}{{f{An{Ch}}{An{Ch}}}Kj}{KjAn}0{{dc}Fh{{Fl{Fj}}}}{{}Cj}{{}{{B`{Fn}}}}{{}{{B`{G`}}}}{{}{{B`{Gb}}}}{{}{{B`{{An{Al}}}}}}0{{{d{Kj}}}Gd}{{{d{jKn}}Ch}Ab}{{{d{jKh}}Ch}Ab}{{{d{jKl}}Ch}Ab}{{{d{Kj}}}{{Dl{{B`{Dd}}Dj}}}}{{dCh}Gf}{{{d{Bb}}}{{Dl{Fj}}}}{{{d{Bb}}c}{{Dl{Fj}}}Bd}{c{{Dl{e}}}{}{}}0000{{{d{Kl}}{d{f}}}{{Gh{{An{Ch}}}}}}{{{d{jKl}}f}{{Gh{Ab}}}}{{}{{Dl{c}}}{}}0000{{{d{jKl}}Ch}{{Gh{Ab}}}}{{}Gj}{dGl}0000{{{An{c}}{d{Bj}}}c{}}{{}c{}}0000{{{d{Kh}}Fb}Kh}{{{d{Kl}}Fb}Kl}`{{{d{Lb}}Ch}Gf}`````````````````````{{dLd}Ab}000000000{LfFb}{IlCh}{d{{d{c}}}{}}0000000000{{{d{j}}}{{d{jc}}}{}}0000000000{Lff}{{}Ah}00000000000000000{{{d{jIb}}}Ab}{{{d{Ib}}}Ib}{{{d{Lf}}}Lf}{{{d{J`}}}J`}{{{d{n}}}n}{{{d{Hb}}}Hb}{{{d{Lh}}}Lh}{{{d{Il}}}Il}{{{d{Ij}}}Ij}{{{d{Af}}}Af}{{{d{In}}}In}{{d{d{jc}}}Ab{}}000000000{{dDd}Ab}000000000{c{{Dl{Ib}}}Lj}{{{d{Ib}}{d{Ib}}}Cb}{{{d{Lf}}{d{Lf}}}Cb}{{{d{J`}}{d{J`}}}Cb}{{{d{n}}{d{n}}}Cb}{{{d{Hb}}{d{Hb}}}Cb}{{{d{Lh}}{d{Lh}}}Cb}{{{d{Il}}{d{Il}}}Cb}{{{d{Ij}}{d{Ij}}}Cb}{{{d{Af}}{d{Af}}}Cb}{{{d{In}}{d{In}}}Cb}{{}{{Cl{ChCj}}}}00000000{{}{{B`{Cn}}}}00000000{{{d{Ib}}}Hn}{{{d{Ll}}}Hn}{{{d{J`}}}Hn}{{{d{In}}}Hn}{{{d{Ln}}{d{jD`}}}Db}{{{d{Ib}}{d{jD`}}}Db}{{{d{Lf}}{d{jD`}}}Db}{{{d{J`}}{d{jD`}}}Db}{{{d{n}}{d{jD`}}}Db}{{{d{Hb}}{d{jD`}}}Db}{{{d{Lh}}{d{jD`}}}Db}{{{d{Il}}{d{jD`}}}Db}{{{d{Ij}}{d{jD`}}}Db}{{{d{Af}}{d{jD`}}}Db}{{{d{In}}{d{jD`}}}Db}{cc{}}00{nJ`}11111111{AfIn}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Lf{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{J`{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{n{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Hb{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Lh{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Il{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Ij{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{Af{d{{Df{Dd}}}}}}Dj}}}}{{{d{{Df{Dd}}}}}{{Dl{{Dh{In{d{{Df{Dd}}}}}}Dj}}}}{{{d{Ej}}{d{jEl}}}Ab}00000000{{}c{}}0000000000{{}Cb}00000000{{{d{Ib}}}Ch}{LhCh}{IlCh}{J`B`}{nB`}{HbB`}{{{B`{Il}}Hn}J`}{{Fb{d{Ej}}f{B`{Il}}Hn}n}{{{d{Ej}}fHn{d{Ej}}}Il}{{GfHn}Ij}{{Fb{d{Ej}}f{B`{Ij}}Hn}Af}{{{B`{Ij}}Hn}In}{Lhf}{Ilf}{nLf}{HbLf}{AfLf}{LfCh}{{{d{Fd}}}{{d{Lf}}}}{{{d{n}}}{{d{Lf}}}}{{{d{Hb}}}{{d{Lf}}}}{{{d{Af}}}{{d{Lf}}}}{{{d{Ib}}}{{Gh{{An{f}}}}}}{{}{{B`{G`}}}}{{}{{B`{{An{Al}}}}}}00000000{{{d{Ib}}c}DlM`}{{{d{Lf}}}Gd}{{{d{J`}}}Gd}{{{d{n}}}Gd}{{{d{Hb}}}Gd}{{{d{Lh}}}Gd}{{{d{Il}}}Gd}{{{d{Ij}}}Gd}{{{d{Af}}}Gd}{{{d{In}}}Gd}{{{d{jIb}}Hn}Ab}{{{d{jIb}}f}Ab}{{{d{Lf}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{J`}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{n}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Hb}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Lh}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Il}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Ij}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{Af}}}{{Dl{{B`{Dd}}Dj}}}}{{{d{In}}}{{Dl{{B`{Dd}}Dj}}}}{dc{}}000000000{{{d{Ib}}}{{B`{{Dh{ChCh}}}}}}{IlHn}{IjHn}{IjGf}{AfB`}{InB`}{c{{Dl{e}}}{}{}}0{{{B`{{Dh{ChCh}}}}}{{Dl{Ibc}}}{}}{Ch{{Dl{Ibc}}}{}}222222222{{}{{Dl{c}}}{}}0000000000{{}Gj}00000000{dGl}0000000000{{{An{c}}{d{Bj}}}c{}}00000000{J`Hn}{nHn}{HbHn}{AfHn}{InHn}{{}c{}}0000000000{{{d{Ej}}Hn{d{Ej}}}Ib}{{{d{Ej}}Hn{d{Ej}}f}Ib}","D":"CNn","p":[[5,"ControllerContractRef",9],[1,"reference",null,null,1],[6,"Address",1515],[5,"BaseControllerContractRef",9],[0,"mut"],[5,"Controller",9],[5,"PaymentVoucher",1174],[5,"Bytes",1516],[1,"unit"],[5,"ControllerHostRef",9,1517],[5,"RenewalPaymentVoucher",1174],[6,"CLType",1518],[5,"BaseControllerHostRef",9,1519],[6,"CustomType",1520],[6,"Option",1521,null,1],[5,"Vec",1522],[5,"HostEnv",1523],[10,"OdraConfig",1523],[5,"EntryPointsCaller",1524],[5,"Entrypoint",1525],[5,"ContractEnv",1526],[5,"Rc",1527,null,1],[5,"BaseController",9],[5,"PaymentFulfilled",9],[1,"bool"],[5,"SignerPublicKeyChanged",9],[5,"TreasuryAddressChanged",9],[5,"String",1528],[5,"Schema",1529],[5,"BTreeMap",1530],[5,"Event",1525],[5,"Formatter",1531],[8,"Result",1531],[1,"u8"],[1,"slice"],[1,"tuple",null,null,1],[6,"Error",1532],[6,"Result",1533,null,1],[1,"i32"],[6,"EventError",1534],[10,"FromBytes",1532],[10,"EventInstance",1535],[8,"Role",1536],[6,"PublicKey",1537],[1,"str"],[5,"RuntimeArgs",1538],[5,"ControllerInitArgs",9,1517],[5,"ContractCallResult",1539],[5,"U512",1540],[10,"Payment",1174],[10,"ToBytes",1532],[1,"never"],[6,"OdraError",1534],[10,"Into",1541,null,1],[5,"Entrypoint",1520],[5,"UserError",1520],[5,"Event",1520],[1,"usize"],[5,"U256",1540],[8,"OdraResult",1534],[6,"NamedCLType",1542],[5,"TypeId",1543],[5,"SecondaryMarketContractRef",311],[5,"SecondaryMarket",311],[5,"SecondarySaleVoucher",1174],[5,"SecondaryMarketHostRef",311,1544],[5,"SecondaryMarketInitArgs",311,1544],[5,"NameToken",425],[5,"NameTokenContractRef",425],[5,"NameTokenHostRef",425,1545],[1,"u64"],[5,"NameTokenInitArgs",425,1545],[5,"NameTokenMetadata",1174],[5,"RegistrarContractRef",641],[5,"Registrar",641],[5,"RegistrarHostRef",641,1546],[5,"TokenRenewalInfo",1174],[5,"NameMintInfo",1174],[5,"RenewalVoucher",1174],[5,"TokenizationVoucher",1174],[5,"GracePeriodChanged",641],[5,"RegistrarInitArgs",641,1546],[5,"ResolverContractRef",829],[5,"DefaultResolverContractRef",829],[5,"ResolverHostRef",829,1547],[5,"DefaultResolverHostRef",829,1548],[5,"DefaultResolver",829],[5,"ResolutionChanged",829],[5,"ResolutionCleared",829],[5,"NameTokenAddressChanged",829],[5,"DefaultResolverInitArgs",829,1548],[5,"ReverseResolverContractRef",1064],[5,"PrimaryNameChanged",1064],[5,"ReverseResolverHostRef",1064,1549],[5,"ReverseResolver",1064],[5,"ReverseResolverInitArgs",1064,1549],[10,"ToTokenId",1172],[5,"Private",1550],[5,"PaymentInfo",1174],[5,"NameTransferInfo",1174],[10,"Deserializer",1551],[10,"ExpirableVoucher",1174],[6,"NameTokenError",1174],[10,"Serializer",1552],[6,"ControllerError",9],[6,"NameTokenError",425],[6,"RegistrarError",641],[6,"ResolverError",829]],"r":[[11,1519],[17,1517],[18,1517],[28,1517],[30,1519],[36,1517],[37,1517],[40,1519],[47,1517],[48,1517],[51,1519],[55,1517],[58,1517],[65,1517],[66,1519],[73,1517],[74,1519],[78,1517],[80,1519],[96,1517],[97,1517],[100,1519],[105,1517],[106,1519],[109,1517],[112,1519],[115,1517],[118,1519],[120,1517],[122,1519],[125,1517],[135,1517],[136,1517],[137,1517],[140,1519],[147,1517],[150,1519],[154,1517],[155,1519],[166,1517],[169,1519],[172,1517],[175,1517],[178,1517],[181,1519],[184,1517],[189,1517],[192,1519],[213,1517],[217,1517],[219,1517],[222,1517],[229,1517],[230,1517],[231,1517],[241,1517],[242,1517],[245,1519],[247,1517],[248,1519],[249,1517],[250,1519],[251,1517],[257,1517],[258,1517],[261,1519],[263,1517],[264,1519],[265,1517],[266,1517],[267,1519],[268,1517],[269,1517],[270,1519],[271,1517],[272,1517],[273,1517],[274,1517],[283,1517],[284,1517],[287,1519],[291,1517],[301,1517],[302,1517],[305,1519],[308,1517],[310,1519],[313,1544],[314,1544],[316,1544],[319,1544],[320,1544],[323,1544],[324,1544],[327,1544],[328,1544],[332,1544],[335,1544],[340,1544],[341,1544],[342,1544],[345,1544],[348,1544],[350,1544],[353,1544],[356,1544],[357,1544],[358,1544],[361,1544],[362,1544],[364,1544],[367,1544],[370,1544],[374,1544],[381,1544],[384,1544],[385,1544],[388,1544],[390,1544],[391,1544],[396,1544],[397,1544],[398,1544],[399,1544],[400,1544],[403,1544],[404,1544],[405,1544],[406,1544],[407,1544],[408,1544],[409,1544],[410,1544],[411,1544],[414,1544],[415,1544],[418,1544],[421,1544],[422,1544],[424,1544],[432,1545],[433,1545],[439,1545],[441,1545],[444,1545],[447,1545],[450,1545],[453,1545],[456,1545],[459,1545],[462,1545],[463,1545],[467,1545],[468,1545],[472,1545],[473,1545],[477,1545],[480,1545],[485,1545],[486,1545],[490,1545],[491,1545],[494,1545],[497,1545],[499,1545],[502,1545],[505,1545],[506,1545],[507,1545],[511,1545],[514,1545],[515,1545],[517,1545],[520,1545],[523,1545],[524,1545],[527,1545],[530,1545],[533,1545],[536,1545],[540,1545],[543,1545],[546,1545],[549,1545],[557,1545],[560,1545],[563,1545],[566,1545],[567,1545],[570,1545],[574,1545],[577,1545],[580,1545],[581,1545],[582,1545],[583,1545],[584,1545],[585,1545],[586,1545],[587,1545],[588,1545],[593,1545],[594,1545],[596,1545],[597,1545],[598,1545],[599,1545],[602,1545],[603,1545],[605,1545],[606,1545],[607,1545],[608,1545],[609,1545],[610,1545],[611,1545],[612,1545],[613,1545],[614,1545],[615,1545],[616,1545],[617,1545],[618,1545],[619,1545],[620,1545],[621,1545],[622,1545],[623,1545],[624,1545],[627,1545],[628,1545],[632,1545],[633,1545],[637,1545],[639,1545],[650,1546],[651,1546],[657,1546],[660,1546],[663,1546],[666,1546],[669,1546],[672,1546],[676,1546],[677,1546],[682,1546],[683,1546],[687,1546],[690,1546],[693,1546],[696,1546],[700,1546],[703,1546],[709,1546],[714,1546],[715,1546],[718,1546],[721,1546],[724,1546],[727,1546],[729,1546],[732,1546],[737,1546],[738,1546],[739,1546],[744,1546],[746,1546],[749,1546],[753,1546],[756,1546],[759,1546],[763,1546],[774,1546],[777,1546],[778,1546],[779,1546],[780,1546],[781,1546],[782,1546],[783,1546],[784,1546],[787,1546],[791,1546],[792,1546],[794,1546],[795,1546],[796,1546],[797,1546],[801,1546],[802,1546],[804,1546],[805,1546],[806,1546],[807,1546],[808,1546],[809,1546],[814,1546],[815,1546],[819,1546],[824,1546],[825,1546],[828,1546],[831,1548],[832,1548],[843,1547],[847,1547],[849,1548],[851,1547],[857,1548],[858,1548],[861,1547],[867,1548],[868,1548],[876,1547],[877,1548],[881,1548],[883,1547],[885,1548],[895,1547],[901,1548],[902,1548],[907,1547],[908,1548],[911,1548],[914,1548],[916,1548],[918,1547],[921,1548],[926,1547],[932,1548],[933,1548],[934,1548],[940,1547],[943,1548],[947,1547],[948,1548],[953,1548],[955,1547],[961,1548],[963,1547],[966,1548],[970,1548],[986,1547],[989,1548],[991,1547],[994,1548],[1002,1547],[1008,1548],[1009,1548],[1011,1548],[1012,1548],[1013,1547],[1014,1548],[1016,1547],[1022,1548],[1023,1548],[1025,1547],[1026,1548],[1027,1547],[1028,1548],[1029,1548],[1030,1547],[1031,1548],[1032,1547],[1033,1548],[1038,1547],[1044,1548],[1045,1548],[1051,1547],[1057,1548],[1058,1548],[1061,1547],[1063,1548],[1067,1549],[1068,1549],[1070,1549],[1074,1549],[1075,1549],[1079,1549],[1080,1549],[1084,1549],[1088,1549],[1091,1549],[1098,1549],[1099,1549],[1102,1549],[1105,1549],[1107,1549],[1110,1549],[1114,1549],[1115,1549],[1116,1549],[1120,1549],[1123,1549],[1126,1549],[1140,1549],[1147,1549],[1148,1549],[1150,1549],[1151,1549],[1154,1549],[1155,1549],[1157,1549],[1161,1549],[1162,1549],[1167,1549],[1168,1549],[1171,1549]],"b":[[1446,"impl-TryFrom%3CVec%3C(String,+String)%3E%3E-for-NameTokenMetadata"],[1447,"impl-TryFrom%3CString%3E-for-NameTokenMetadata"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAPQDbgAAAAkADQABABQAAgAYAAEAHAAZADwAHwBnAAQAeAADAIAAAgCKAAAAjwACAJgACQClAAUAsAAAALoAAQDCABEA3AAAAOEABQDpAA4A/QAKABQBDQAmAREAPAEJAEkBCQBXAQAAXgEBAGYBAABrAQUAdAEAAHgBAwCCAQAAhgEBAIkBBQCSAQMAnQEDAKQBCQCwAQAAswECALkBBADHAQIAzQEWAOwBAADzAQEA+wEAAAECCAANAgMAFwIDACECAgAnAgQALwIFADgCBABAAgIATgIGAFkCBAByAhEAhQICAIoCAACNAgUAogIOALoCCQDHAgAAzgIBANkCAQDeAgAA5AIAAOYCAADqAgQA8AICAPkCAAD9AgcACAMBABIDAQAVAwUAHwMFACsDBgA1AwgAQgMCAEgDAQBLAwAATQMxAIkDBACUAwMAmwMCAKcDAACpAwQAsQMLAMADBADIAwAAzAMPAN8DAQDkAw8A+AMJAAsEHQAuBBoATgQBAFMEBQBcBAAAXwQIAGkECQB2BAgAgQQEAIcEDgCXBAQAoAQBAKYEAACoBAEArAR/AC8FAAA4BRIAVgWVAA==","P":[[31,"T"],[53,""],[71,"T"],[73,""],[91,"T"],[102,""],[105,"T"],[107,""],[130,"U"],[137,""],[138,"U"],[142,""],[174,"P"],[175,""],[185,"E"],[187,""],[234,"T"],[236,"U,T"],[247,""],[252,"U"],[263,""],[293,"T"],[296,"V"],[307,""],[317,"T"],[325,""],[331,"T"],[332,""],[338,"T"],[343,""],[354,"U"],[357,""],[358,"U"],[359,""],[371,"E"],[372,""],[393,"T"],[394,"U,T"],[398,""],[401,"U"],[405,""],[419,"V"],[423,""],[460,"T"],[470,""],[476,"T"],[477,""],[483,"T"],[488,""],[491,"T"],[492,""],[503,"U"],[506,""],[507,"U"],[509,""],[537,"E"],[538,""],[590,"T"],[591,"U,T"],[596,""],[600,"U"],[605,""],[630,"V"],[635,""],[673,"T"],[685,""],[699,"T"],[700,""],[711,"T"],[717,""],[718,"T"],[719,""],[734,"U"],[739,""],[740,"U"],[741,""],[760,"E"],[761,""],[786,"T"],[787,""],[788,"U,T"],[794,""],[798,"U"],[804,""],[820,"T"],[821,"V"],[827,""],[850,"T"],[870,""],[880,"T"],[881,""],[894,"T"],[904,""],[907,"T"],[909,""],[925,"U"],[934,""],[935,"U"],[936,""],[967,"E"],[968,""],[1000,"T"],[1001,"U,T"],[1011,""],[1015,"U"],[1025,""],[1047,"T"],[1050,"V"],[1060,""],[1072,"T"],[1082,""],[1087,"T"],[1088,""],[1096,"T"],[1101,""],[1102,"T"],[1103,""],[1112,"U"],[1115,""],[1116,"U"],[1118,""],[1130,"E"],[1131,""],[1144,"T"],[1145,"U,T"],[1150,""],[1152,"U"],[1157,""],[1164,"T"],[1165,"V"],[1170,""],[1207,"T"],[1229,""],[1259,"T"],[1269,""],[1279,"__D"],[1280,""],[1323,"T"],[1326,""],[1327,"T"],[1335,""],[1354,"U"],[1365,""],[1407,"__S"],[1408,""],[1428,"T"],[1438,""],[1444,"U,T"],[1446,"TryFrom::Error"],[1448,"U,T"],[1457,"U"],[1468,""],[1488,"T"],[1497,""],[1502,"V"],[1513,""]]}]]')); if (typeof exports !== 'undefined') exports.searchIndex = searchIndex; else if (window.initSearch) window.initSearch(searchIndex); -//{"start":39,"fragment_lengths":[41541]} \ No newline at end of file +//{"start":39,"fragment_lengths":[41732]} \ No newline at end of file diff --git a/docs/settings.html b/docs/settings.html index 4fe542f..99de3be 100644 --- a/docs/settings.html +++ b/docs/settings.html @@ -1 +1 @@ -Settings

Rustdoc settings

Back
\ No newline at end of file +Settings

Rustdoc settings

Back
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/controller.rs.html b/docs/src/casper_name_contracts/contracts/controller.rs.html index f1ec7c5..747b686 100644 --- a/docs/src/casper_name_contracts/contracts/controller.rs.html +++ b/docs/src/casper_name_contracts/contracts/controller.rs.html @@ -1,1103 +1,551 @@ -controller.rs - source

casper_name_contracts/contracts/
controller.rs

-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
use super::registrar::RegistrarContractRef;
-use crate::data_structures::{Payment, PaymentVoucher, RenewalPaymentVoucher};
-use odra::{
-    casper_types::{
-        bytesrepr::{Bytes, ToBytes},
-        PublicKey, U512,
-    },
-    prelude::*,
-};
-use odra_modules::{
-    access::{AccessControl, Role, DEFAULT_ADMIN_ROLE},
-    security::Pauseable,
-};
-
-/// Event with the payment information.
-#[odra::event]
-pub struct PaymentFulfilled {
-    payment_id: String,
-    buyer: Address,
-    amount: U512,
-}
-
-/// Event emitted when the signer public key is changed.
-#[odra::event]
-pub struct SignerPublicKeyChanged {
-    new_signer_public_key: PublicKey,
-}
-
-/// Event emitted when the treasury address is changed.
-#[odra::event]
-pub struct TreasuryAddressChanged {
-    new_treasury_address: Address,
-}
-
-/// Controller smart contract. It handles payments and talks to the [Registrar
-/// Contract](super::registrar::Registrar).
-#[odra::module]
-pub struct Controller {
-    controller: SubModule<BaseController>,
-    registrar: External<RegistrarContractRef>,
-}
-
-#[odra::module]
-impl Controller {
-    delegate! {
-        to self.controller {
-            fn has_role(&self, role: &Role, address: &Address) -> bool;
-            fn grant_role(&mut self, role: &Role, address: &Address);
-            fn revoke_role(&mut self, role: &Role, address: &Address);
-            fn set_signer_public_key(&mut self, signer: PublicKey);
-            fn set_treasury(&mut self, treasury: Address);
-            fn signer_public_key(&self) -> PublicKey;
-            fn pause(&mut self);
-            fn unpause(&mut self);
-            fn is_paused(&self) -> bool;
-        }
-    }
-
-    /// Initializes the controller with the registrar contract address, the
-    /// signer public key and the treasury address.
-    pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address) {
-        if !registrar.is_contract() {
-            self.revert(ControllerError::ContractAddressExpected);
-        }
-        self.registrar.set(registrar);
-        self.controller.init(signer, treasury);
-    }
-
-    /// Payable. Buys new name tokens.
-    #[odra(payable)]
-    pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes) {
-        self.controller.require_not_paused();
-        self.controller.process_payment_voucher(&voucher, signature);
-        self.registrar.controller_register(voucher.into());
-    }
-
-    /// Payable. Renews name tokens.
-    #[odra(payable)]
-    pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes) {
-        self.controller.require_not_paused();
-        self.controller.process_payment_voucher(&voucher, signature);
-        self.registrar.controller_prolong(voucher.into());
-    }
-
-    /// Payable. Buys new name tokens and renews existing ones.
-    #[odra(payable)]
-    pub fn buy_and_renew(
-        &mut self,
-        payment_voucher: PaymentVoucher,
-        payment_signature: Bytes,
-        renewal_voucher: RenewalPaymentVoucher,
-        renewal_signature: Bytes,
-    ) {
-        self.controller.require_not_paused();
-        self.controller
-            .process_payment_voucher(&payment_voucher, payment_signature);
-        self.controller
-            .process_payment_voucher(&renewal_voucher, renewal_signature);
-        self.registrar
-            .controller_prolong_and_register(renewal_voucher.into(), payment_voucher.into());
-    }
-
-    /// Try to resolve a full domain name to an address.
-    pub fn resolve(&self, full_domain: String) -> Option<Address> {
-        self.registrar.resolve(full_domain)
-    }
-}
-
-/// Base for all controllers. It handles access control, treasury and signer
-/// public key.
-#[odra::module(
-    errors = ControllerError,
-    events = [PaymentFulfilled, SignerPublicKeyChanged, TreasuryAddressChanged]
-)]
-pub struct BaseController {
-    signer_public_key: Var<PublicKey>,
-    treasury: Var<Address>,
-    access_control: SubModule<AccessControl>,
-    pausable: SubModule<Pauseable>,
-}
-
-#[odra::module]
-impl BaseController {
-    delegate! {
-        to self.access_control {
-            fn has_role(&self, role: &Role, address: &Address) -> bool;
-            fn grant_role(&mut self, role: &Role, address: &Address);
-            fn revoke_role(&mut self, role: &Role, address: &Address);
-        }
-
-        to self.pausable {
-            fn is_paused(&self) -> bool;
-            fn require_not_paused(&self);
-        }
-    }
-}
-
-impl BaseController {
-    /// Initializes the controller.
-    /// It assigns the deployer as the admin.
-    pub fn init(&mut self, signer: PublicKey, treasury: Address) {
-        self.signer_public_key.set(signer);
-        self.treasury.set(treasury);
-
-        // Setup roles.
-        let admin = self.env().caller();
-        self.access_control
-            .unchecked_grant_role(&DEFAULT_ADMIN_ROLE, &admin);
-    }
-
-    /// Temporarily stops the contract.
-    pub fn pause(&mut self) {
-        self.assert_caller_is_admin();
-        self.pausable.pause();
-    }
-
-    /// Returns to normal operation.
-    pub fn unpause(&mut self) {
-        self.assert_caller_is_admin();
-        self.pausable.unpause();
-    }
-
-    /// Admin only. Sets the public key of the signer.
-    pub fn set_signer_public_key(&mut self, signer: PublicKey) {
-        self.assert_caller_is_admin();
-        self.signer_public_key.set(signer.clone());
-        self.env().emit_event(SignerPublicKeyChanged {
-            new_signer_public_key: signer,
-        });
-    }
-
-    /// Admin only. Sets the treasury address.
-    pub fn set_treasury(&mut self, treasury: Address) {
-        self.assert_caller_is_admin();
-        self.treasury.set(treasury);
-        self.env().emit_event(TreasuryAddressChanged {
-            new_treasury_address: treasury,
-        });
-    }
-
-    /// Returns the public key of the signer.
-    pub fn signer_public_key(&self) -> PublicKey {
-        self.signer_public_key.get().unwrap_or_revert(self)
-    }
-
-    #[inline]
-    fn assert_caller_is_admin(&self) {
-        self.access_control
-            .check_role(&DEFAULT_ADMIN_ROLE, &self.env().caller());
-    }
-
-    fn assert_caller_is_buyer<P: Payment>(&self, voucher: &P) {
-        if self.env().caller() != voucher.payment_info().buyer {
-            self.revert(ControllerError::BuyerMustBeCaller);
-        }
-    }
-
-    /// Validate the payment voucher and process the payment.
-    pub fn process_payment_voucher<P: Payment + ToBytes>(&self, voucher: &P, signature: Bytes) {
-        self.assert_caller_is_buyer(voucher);
-        self.verify_signature(voucher, &signature);
-        self.collect_cspr_payment(voucher);
-    }
-
-    fn collect_cspr_payment<P: Payment>(&self, voucher: &P) {
-        let fee_collector = self
-            .treasury
-            .get_or_revert_with(ControllerError::FeeCollectorNotSet);
-        let payment_info = voucher.payment_info();
-        let attached_value = self.env().attached_value();
-        if attached_value < payment_info.amount {
-            self.revert(ControllerError::InsufficientPayment);
-        }
-        if attached_value > payment_info.amount {
-            self.revert(ControllerError::PaymentTooLarge);
-        }
-        self.env()
-            .transfer_tokens(&fee_collector, &payment_info.amount);
-        self.env().emit_event(PaymentFulfilled {
-            payment_id: payment_info.payment_id.clone(),
-            buyer: payment_info.buyer,
-            amount: payment_info.amount,
-        });
-    }
-
-    fn verify_signature<T: ToBytes>(&self, data: &T, signature: &Bytes) {
-        let public_key = self.signer_public_key();
-        let bytes: Bytes = data.to_bytes().unwrap_or_revert(self).into();
-        let verified = self.env().verify_signature(&bytes, signature, &public_key);
-        if !verified {
-            self.revert(ControllerError::InvalidSignature);
-        }
-    }
-}
-
-/// Controller errors.
-#[odra::odra_error]
-pub enum ControllerError {
-    InvalidSignature = 1101,
-    FeeCollectorNotSet = 1102,
-    RegistrarNotSet = 1103,
-    BuyerMustBeCaller = 1104,
-    InsufficientPayment = 1105,
-    PaymentTooLarge = 1106,
-    ContractAddressExpected = 1107,
-}
-
-#[cfg(test)]
-mod tests {
-    use odra::{
-        casper_event_standard::EventInstance,
-        casper_types::U512,
-        host::{Deployer, HostRef},
-    };
-
-    use crate::{
-        contracts::controller::{
-            Controller, ControllerInitArgs, SignerPublicKeyChanged, TreasuryAddressChanged,
-        },
-        data_structures::{NameMintInfo, PaymentVoucher, RenewalPaymentVoucher, TokenRenewalInfo},
-        test_context::{generate_token_id, TestContext, INIT_TIME, TOKEN_EXPIRATION, TOKEN_NAME},
-    };
-
-    #[test]
-    fn deploy_fails_if_account_set_as_registrar() {
-        let env = odra_test::env();
-        let signer = env.get_account(10);
-        let treasury = env.get_account(11);
-        let result = Controller::try_deploy(
-            &env,
-            ControllerInitArgs {
-                registrar: env.get_account(1),
-                signer: env.public_key(&signer),
-                treasury,
-            },
-        );
-        assert!(result.is_err());
-    }
-
-    #[test]
-    fn test_controller() {
-        let mut ctx = TestContext::install_and_setup();
-        let (fee_collector, alice) = (ctx.treasury, ctx.alice);
-
-        // Prepare a payment voucher.
-        let token_expiration = ctx.token_expiration_time();
-        let voucher_expiration = ctx.token_expiration_time();
-        let amount = U512::from(2000);
-
-        let names = vec![NameMintInfo::new(TOKEN_NAME, alice, token_expiration, "")];
-        let voucher = PaymentVoucher::new(amount, "id_1", alice, names, voucher_expiration);
-        let signature = ctx.sign(&voucher);
-
-        // CSPR balances before the purchase.
-        let fee_collector_balance = ctx.balance_of(&fee_collector);
-        let alice_balance = ctx.balance_of(&alice);
-
-        // But the voucher.
-        ctx.set_caller(alice);
-        ctx.controller
-            .with_tokens(amount)
-            .buy(voucher, signature.clone());
-
-        // Token was minted.
-        assert_eq!(ctx.token.balance_of(alice), 1.into());
-
-        // CSPR balances after the purchase.
-        assert_eq!(
-            ctx.balance_of(&fee_collector),
-            fee_collector_balance + amount
-        );
-        assert_eq!(ctx.balance_of(&alice), alice_balance - amount);
-    }
-
-    #[test]
-    fn test_renew() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, fee_collector, alice) = (ctx.admin, ctx.treasury, ctx.alice);
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        // Prepare a payment voucher.
-        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
-        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION + 100;
-        let amount = U512::from(2000);
-
-        let names = vec![TokenRenewalInfo::new(
-            generate_token_id(TOKEN_NAME),
-            token_expiration,
-        )];
-        let voucher = RenewalPaymentVoucher::new(amount, "id_1", alice, names, voucher_expiration);
-        let signature = ctx.sign(&voucher);
-
-        // CSPR balances before the purchase.
-        let fee_collector_balance = ctx.balance_of(&fee_collector);
-        let alice_balance = ctx.balance_of(&alice);
-
-        ctx.advance_block_time(TOKEN_EXPIRATION + 1);
-        // But the voucher.
-        ctx.set_caller(alice);
-        ctx.controller
-            .with_tokens(amount)
-            .renew(voucher, signature.clone());
-
-        // Token was minted.
-        assert_eq!(ctx.token.balance_of(alice), 1.into());
-
-        // CSPR balances after the purchase.
-        assert_eq!(
-            ctx.balance_of(&fee_collector),
-            fee_collector_balance + amount
-        );
-        assert_eq!(ctx.balance_of(&alice), alice_balance - amount);
-    }
-
-    #[test]
-    fn test_only_admin_can_pause() {
-        let mut ctx = TestContext::install_and_setup();
-        // Given a contract with an admin and a user.
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // When a non-admin tries to pause it.
-        ctx.set_caller(alice);
-        let result = ctx.controller.try_pause();
-        // Then it should fail and the contract should not be paused.
-        assert!(result.is_err());
-        assert!(!ctx.controller.is_paused());
-
-        // When the admin tries to pause it.
-        ctx.set_caller(admin);
-        ctx.controller.pause();
-
-        // Then the contract should be paused.
-        assert!(ctx.controller.is_paused());
-    }
-
-    #[test]
-    fn test_only_admin_can_unpause() {
-        let mut ctx = TestContext::install_and_setup();
-        // Given a paused contract.
-        let (admin, alice) = (ctx.admin, ctx.alice);
-        ctx.controller.pause();
-        assert!(ctx.controller.is_paused());
-
-        // When a non-admin tries to unpause it.
-        ctx.set_caller(alice);
-        let result = ctx.controller.try_unpause();
-        // Then it should fail.
-        assert!(result.is_err());
-        assert!(ctx.controller.is_paused());
-
-        // When the admin tries to unpause it.
-        ctx.set_caller(admin);
-        ctx.controller.unpause();
-
-        // Then the contract should be unpaused.
-        assert!(!ctx.controller.is_paused());
-    }
-
-    #[test]
-    fn test_buy_require_not_paused() {
-        let mut ctx = TestContext::install_and_setup();
-        // Given a paused contract.
-        ctx.controller.pause();
-        assert!(ctx.controller.is_paused());
-
-        // When a user tries to buy a name.
-        ctx.set_caller(ctx.alice);
-        let voucher = PaymentVoucher::new(
-            U512::from(2000),
-            "id_1",
-            ctx.alice,
-            vec![NameMintInfo::new(
-                TOKEN_NAME,
-                ctx.alice,
-                ctx.token_expiration_time(),
-                "",
-            )],
-            ctx.token_expiration_time(),
-        );
-        let signature = ctx.sign(&voucher);
-        let result = ctx.controller.try_buy(voucher, signature);
-
-        // Then it should fail.
-        assert_eq!(
-            result,
-            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
-        );
-    }
-
-    #[test]
-    fn test_renew_require_not_paused() {
-        let mut ctx = TestContext::install_and_setup();
-        // Given a paused contract.
-        ctx.controller.pause();
-        assert!(ctx.controller.is_paused());
-
-        // When a user tries to renew a name.
-        ctx.set_caller(ctx.alice);
-        let voucher = RenewalPaymentVoucher::new(
-            U512::from(2000),
-            "id_1",
-            ctx.alice,
-            vec![TokenRenewalInfo::new(
-                generate_token_id(TOKEN_NAME),
-                ctx.token_expiration_time(),
-            )],
-            ctx.token_expiration_time(),
-        );
-        let signature = ctx.sign(&voucher);
-        let result = ctx.controller.try_renew(voucher, signature);
-
-        // Then it should fail.
-        assert_eq!(
-            result,
-            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
-        );
-    }
-
-    #[test]
-    fn test_buy_and_renew_require_not_paused() {
-        let mut ctx = TestContext::install_and_setup();
-        // Given a paused contract.
-        ctx.controller.pause();
-        assert!(ctx.controller.is_paused());
-
-        // When a user tries to buy and renew names.
-        ctx.set_caller(ctx.alice);
-        let payment_voucher = PaymentVoucher::new(
-            U512::from(2000),
-            "id_1",
-            ctx.alice,
-            vec![NameMintInfo::new(
-                TOKEN_NAME,
-                ctx.alice,
-                ctx.token_expiration_time(),
-                "",
-            )],
-            ctx.token_expiration_time(),
-        );
-        let renewal_voucher = RenewalPaymentVoucher::new(
-            U512::from(2000),
-            "id_2",
-            ctx.alice,
-            vec![TokenRenewalInfo::new(
-                generate_token_id(TOKEN_NAME),
-                ctx.token_expiration_time(),
-            )],
-            ctx.token_expiration_time(),
-        );
-        let payment_signature = ctx.sign(&payment_voucher);
-        let renewal_signature = ctx.sign(&renewal_voucher);
-        let result = ctx.controller.try_buy_and_renew(
-            payment_voucher,
-            payment_signature,
-            renewal_voucher,
-            renewal_signature,
-        );
-
-        // Then it should fail.
-        assert_eq!(
-            result,
-            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
-        );
-    }
-
-    #[test]
-    fn test_set_signer_public_key() {
-        let mut ctx = TestContext::install_and_setup();
-        // Given a contract with an admin and a user.
-        let (admin, user) = (ctx.admin, ctx.alice);
-        // When the admin sets the signer public key.
-        ctx.set_caller(admin);
-        let result = ctx
-            .controller
-            .try_set_signer_public_key(ctx.env.public_key(&user));
-        // Then it should succeed and emit an event.
-        assert!(result.is_ok());
-        assert!(ctx
-            .env
-            .emitted(&ctx.controller, SignerPublicKeyChanged::name()));
-
-        // When a non-admin tries to set the signer public key.
-        ctx.set_caller(user);
-        let result = ctx
-            .controller
-            .try_set_signer_public_key(ctx.env.public_key(&user));
-        // Then it should fail.
-        assert!(result.is_err());
-    }
-
-    #[test]
-    fn test_set_treasury() {
-        let mut ctx = TestContext::install_and_setup();
-        // Given a contract with an admin and two users.
-        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
-        // When the admin sets the treasury address.
-        ctx.set_caller(admin);
-        let result = ctx.controller.try_set_treasury(alice);
-        // Then it should succeed and emit an event.
-        assert!(result.is_ok());
-        assert!(ctx
-            .env
-            .emitted(&ctx.controller, TreasuryAddressChanged::name()));
-
-        // When a non-admin tries to set the treasury address.
-        ctx.set_caller(alice);
-        let result = ctx.controller.try_set_treasury(bob);
-        // Then it should fail.
-        assert!(result.is_err());
-    }
-}
-
\ No newline at end of file +controller.rs - source

casper_name_contracts/contracts/
controller.rs

1use super::registrar::RegistrarContractRef;
+2use crate::data_structures::{Payment, PaymentVoucher, RenewalPaymentVoucher};
+3use odra::{
+4    casper_types::{
+5        bytesrepr::{Bytes, ToBytes},
+6        PublicKey, U512,
+7    },
+8    prelude::*,
+9};
+10use odra_modules::{
+11    access::{AccessControl, Role, DEFAULT_ADMIN_ROLE},
+12    security::Pauseable,
+13};
+14
+15/// Event with the payment information.
+16#[odra::event]
+17pub struct PaymentFulfilled {
+18    payment_id: String,
+19    buyer: Address,
+20    amount: U512,
+21}
+22
+23/// Event emitted when the signer public key is changed.
+24#[odra::event]
+25pub struct SignerPublicKeyChanged {
+26    new_signer_public_key: PublicKey,
+27}
+28
+29/// Event emitted when the treasury address is changed.
+30#[odra::event]
+31pub struct TreasuryAddressChanged {
+32    new_treasury_address: Address,
+33}
+34
+35/// Controller smart contract. It handles payments and talks to the [Registrar
+36/// Contract](super::registrar::Registrar).
+37#[odra::module]
+38pub struct Controller {
+39    controller: SubModule<BaseController>,
+40    registrar: External<RegistrarContractRef>,
+41}
+42
+43#[odra::module]
+44impl Controller {
+45    delegate! {
+46        to self.controller {
+47            fn has_role(&self, role: &Role, address: &Address) -> bool;
+48            fn grant_role(&mut self, role: &Role, address: &Address);
+49            fn revoke_role(&mut self, role: &Role, address: &Address);
+50            fn set_signer_public_key(&mut self, signer: PublicKey);
+51            fn set_treasury(&mut self, treasury: Address);
+52            fn signer_public_key(&self) -> PublicKey;
+53            fn pause(&mut self);
+54            fn unpause(&mut self);
+55            fn is_paused(&self) -> bool;
+56        }
+57    }
+58
+59    /// Initializes the controller with the registrar contract address, the
+60    /// signer public key and the treasury address.
+61    pub fn init(&mut self, registrar: Address, signer: PublicKey, treasury: Address) {
+62        if !registrar.is_contract() {
+63            self.revert(ControllerError::ContractAddressExpected);
+64        }
+65        self.registrar.set(registrar);
+66        self.controller.init(signer, treasury);
+67    }
+68
+69    /// Payable. Buys new name tokens.
+70    #[odra(payable)]
+71    pub fn buy(&mut self, voucher: PaymentVoucher, signature: Bytes) {
+72        self.controller.require_not_paused();
+73        self.controller.process_payment_voucher(&voucher, signature);
+74        self.registrar.controller_register(voucher.into());
+75    }
+76
+77    /// Payable. Renews name tokens.
+78    #[odra(payable)]
+79    pub fn renew(&mut self, voucher: RenewalPaymentVoucher, signature: Bytes) {
+80        self.controller.require_not_paused();
+81        self.controller.process_payment_voucher(&voucher, signature);
+82        self.registrar.controller_prolong(voucher.into());
+83    }
+84
+85    /// Payable. Buys new name tokens and renews existing ones.
+86    #[odra(payable)]
+87    pub fn buy_and_renew(
+88        &mut self,
+89        payment_voucher: PaymentVoucher,
+90        payment_signature: Bytes,
+91        renewal_voucher: RenewalPaymentVoucher,
+92        renewal_signature: Bytes,
+93    ) {
+94        self.controller.require_not_paused();
+95        self.controller
+96            .process_payment_voucher(&payment_voucher, payment_signature);
+97        self.controller
+98            .process_payment_voucher(&renewal_voucher, renewal_signature);
+99        self.registrar
+100            .controller_prolong_and_register(renewal_voucher.into(), payment_voucher.into());
+101    }
+102
+103    /// Try to resolve a full domain name to an address.
+104    pub fn resolve(&self, full_domain: String) -> Option<Address> {
+105        self.registrar.resolve(full_domain)
+106    }
+107}
+108
+109/// Base for all controllers. It handles access control, treasury and signer
+110/// public key.
+111#[odra::module(
+112    errors = ControllerError,
+113    events = [PaymentFulfilled, SignerPublicKeyChanged, TreasuryAddressChanged]
+114)]
+115pub struct BaseController {
+116    signer_public_key: Var<PublicKey>,
+117    treasury: Var<Address>,
+118    access_control: SubModule<AccessControl>,
+119    pausable: SubModule<Pauseable>,
+120}
+121
+122#[odra::module]
+123impl BaseController {
+124    delegate! {
+125        to self.access_control {
+126            fn has_role(&self, role: &Role, address: &Address) -> bool;
+127            fn grant_role(&mut self, role: &Role, address: &Address);
+128            fn revoke_role(&mut self, role: &Role, address: &Address);
+129        }
+130
+131        to self.pausable {
+132            fn is_paused(&self) -> bool;
+133            fn require_not_paused(&self);
+134        }
+135    }
+136}
+137
+138impl BaseController {
+139    /// Initializes the controller.
+140    /// It assigns the deployer as the admin.
+141    pub fn init(&mut self, signer: PublicKey, treasury: Address) {
+142        self.signer_public_key.set(signer);
+143        self.treasury.set(treasury);
+144
+145        // Setup roles.
+146        let admin = self.env().caller();
+147        self.access_control
+148            .unchecked_grant_role(&DEFAULT_ADMIN_ROLE, &admin);
+149    }
+150
+151    /// Temporarily stops the contract.
+152    pub fn pause(&mut self) {
+153        self.assert_caller_is_admin();
+154        self.pausable.pause();
+155    }
+156
+157    /// Returns to normal operation.
+158    pub fn unpause(&mut self) {
+159        self.assert_caller_is_admin();
+160        self.pausable.unpause();
+161    }
+162
+163    /// Admin only. Sets the public key of the signer.
+164    pub fn set_signer_public_key(&mut self, signer: PublicKey) {
+165        self.assert_caller_is_admin();
+166        self.signer_public_key.set(signer.clone());
+167        self.env().emit_event(SignerPublicKeyChanged {
+168            new_signer_public_key: signer,
+169        });
+170    }
+171
+172    /// Admin only. Sets the treasury address.
+173    pub fn set_treasury(&mut self, treasury: Address) {
+174        self.assert_caller_is_admin();
+175        self.treasury.set(treasury);
+176        self.env().emit_event(TreasuryAddressChanged {
+177            new_treasury_address: treasury,
+178        });
+179    }
+180
+181    /// Returns the public key of the signer.
+182    pub fn signer_public_key(&self) -> PublicKey {
+183        self.signer_public_key.get().unwrap_or_revert(self)
+184    }
+185
+186    #[inline]
+187    fn assert_caller_is_admin(&self) {
+188        self.access_control
+189            .check_role(&DEFAULT_ADMIN_ROLE, &self.env().caller());
+190    }
+191
+192    fn assert_caller_is_buyer<P: Payment>(&self, voucher: &P) {
+193        if self.env().caller() != voucher.payment_info().buyer {
+194            self.revert(ControllerError::BuyerMustBeCaller);
+195        }
+196    }
+197
+198    /// Validate the payment voucher and process the payment.
+199    pub fn process_payment_voucher<P: Payment + ToBytes>(&self, voucher: &P, signature: Bytes) {
+200        self.assert_caller_is_buyer(voucher);
+201        self.verify_signature(voucher, &signature);
+202        self.collect_cspr_payment(voucher);
+203    }
+204
+205    fn collect_cspr_payment<P: Payment>(&self, voucher: &P) {
+206        let fee_collector = self
+207            .treasury
+208            .get_or_revert_with(ControllerError::FeeCollectorNotSet);
+209        let payment_info = voucher.payment_info();
+210        let attached_value = self.env().attached_value();
+211        if attached_value < payment_info.amount {
+212            self.revert(ControllerError::InsufficientPayment);
+213        }
+214        if attached_value > payment_info.amount {
+215            self.revert(ControllerError::PaymentTooLarge);
+216        }
+217        self.env()
+218            .transfer_tokens(&fee_collector, &payment_info.amount);
+219        self.env().emit_event(PaymentFulfilled {
+220            payment_id: payment_info.payment_id.clone(),
+221            buyer: payment_info.buyer,
+222            amount: payment_info.amount,
+223        });
+224    }
+225
+226    fn verify_signature<T: ToBytes>(&self, data: &T, signature: &Bytes) {
+227        let public_key = self.signer_public_key();
+228        let bytes: Bytes = data.to_bytes().unwrap_or_revert(self).into();
+229        let verified = self.env().verify_signature(&bytes, signature, &public_key);
+230        if !verified {
+231            self.revert(ControllerError::InvalidSignature);
+232        }
+233    }
+234}
+235
+236/// Controller errors.
+237#[odra::odra_error]
+238pub enum ControllerError {
+239    InvalidSignature = 1101,
+240    FeeCollectorNotSet = 1102,
+241    RegistrarNotSet = 1103,
+242    BuyerMustBeCaller = 1104,
+243    InsufficientPayment = 1105,
+244    PaymentTooLarge = 1106,
+245    ContractAddressExpected = 1107,
+246}
+247
+248#[cfg(test)]
+249mod tests {
+250    use odra::{
+251        casper_event_standard::EventInstance,
+252        casper_types::U512,
+253        host::{Deployer, HostRef},
+254    };
+255
+256    use crate::{
+257        contracts::controller::{
+258            Controller, ControllerInitArgs, SignerPublicKeyChanged, TreasuryAddressChanged,
+259        },
+260        data_structures::{NameMintInfo, PaymentVoucher, RenewalPaymentVoucher, TokenRenewalInfo},
+261        test_context::{generate_token_id, TestContext, INIT_TIME, TOKEN_EXPIRATION, TOKEN_NAME},
+262    };
+263
+264    #[test]
+265    fn deploy_fails_if_account_set_as_registrar() {
+266        let env = odra_test::env();
+267        let signer = env.get_account(10);
+268        let treasury = env.get_account(11);
+269        let result = Controller::try_deploy(
+270            &env,
+271            ControllerInitArgs {
+272                registrar: env.get_account(1),
+273                signer: env.public_key(&signer),
+274                treasury,
+275            },
+276        );
+277        assert!(result.is_err());
+278    }
+279
+280    #[test]
+281    fn test_controller() {
+282        let mut ctx = TestContext::install_and_setup();
+283        let (fee_collector, alice) = (ctx.treasury, ctx.alice);
+284
+285        // Prepare a payment voucher.
+286        let token_expiration = ctx.token_expiration_time();
+287        let voucher_expiration = ctx.token_expiration_time();
+288        let amount = U512::from(2000);
+289
+290        let names = vec![NameMintInfo::new(TOKEN_NAME, alice, token_expiration, "")];
+291        let voucher = PaymentVoucher::new(amount, "id_1", alice, names, voucher_expiration);
+292        let signature = ctx.sign(&voucher);
+293
+294        // CSPR balances before the purchase.
+295        let fee_collector_balance = ctx.balance_of(&fee_collector);
+296        let alice_balance = ctx.balance_of(&alice);
+297
+298        // But the voucher.
+299        ctx.set_caller(alice);
+300        ctx.controller
+301            .with_tokens(amount)
+302            .buy(voucher, signature.clone());
+303
+304        // Token was minted.
+305        assert_eq!(ctx.token.balance_of(alice), 1.into());
+306
+307        // CSPR balances after the purchase.
+308        assert_eq!(
+309            ctx.balance_of(&fee_collector),
+310            fee_collector_balance + amount
+311        );
+312        assert_eq!(ctx.balance_of(&alice), alice_balance - amount);
+313    }
+314
+315    #[test]
+316    fn test_renew() {
+317        let mut ctx = TestContext::install_and_setup();
+318        let (admin, fee_collector, alice) = (ctx.admin, ctx.treasury, ctx.alice);
+319        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+320
+321        // Prepare a payment voucher.
+322        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
+323        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION + 100;
+324        let amount = U512::from(2000);
+325
+326        let names = vec![TokenRenewalInfo::new(
+327            generate_token_id(TOKEN_NAME),
+328            token_expiration,
+329        )];
+330        let voucher = RenewalPaymentVoucher::new(amount, "id_1", alice, names, voucher_expiration);
+331        let signature = ctx.sign(&voucher);
+332
+333        // CSPR balances before the purchase.
+334        let fee_collector_balance = ctx.balance_of(&fee_collector);
+335        let alice_balance = ctx.balance_of(&alice);
+336
+337        ctx.advance_block_time(TOKEN_EXPIRATION + 1);
+338        // But the voucher.
+339        ctx.set_caller(alice);
+340        ctx.controller
+341            .with_tokens(amount)
+342            .renew(voucher, signature.clone());
+343
+344        // Token was minted.
+345        assert_eq!(ctx.token.balance_of(alice), 1.into());
+346
+347        // CSPR balances after the purchase.
+348        assert_eq!(
+349            ctx.balance_of(&fee_collector),
+350            fee_collector_balance + amount
+351        );
+352        assert_eq!(ctx.balance_of(&alice), alice_balance - amount);
+353    }
+354
+355    #[test]
+356    fn test_only_admin_can_pause() {
+357        let mut ctx = TestContext::install_and_setup();
+358        // Given a contract with an admin and a user.
+359        let (admin, alice) = (ctx.admin, ctx.alice);
+360
+361        // When a non-admin tries to pause it.
+362        ctx.set_caller(alice);
+363        let result = ctx.controller.try_pause();
+364        // Then it should fail and the contract should not be paused.
+365        assert!(result.is_err());
+366        assert!(!ctx.controller.is_paused());
+367
+368        // When the admin tries to pause it.
+369        ctx.set_caller(admin);
+370        ctx.controller.pause();
+371
+372        // Then the contract should be paused.
+373        assert!(ctx.controller.is_paused());
+374    }
+375
+376    #[test]
+377    fn test_only_admin_can_unpause() {
+378        let mut ctx = TestContext::install_and_setup();
+379        // Given a paused contract.
+380        let (admin, alice) = (ctx.admin, ctx.alice);
+381        ctx.controller.pause();
+382        assert!(ctx.controller.is_paused());
+383
+384        // When a non-admin tries to unpause it.
+385        ctx.set_caller(alice);
+386        let result = ctx.controller.try_unpause();
+387        // Then it should fail.
+388        assert!(result.is_err());
+389        assert!(ctx.controller.is_paused());
+390
+391        // When the admin tries to unpause it.
+392        ctx.set_caller(admin);
+393        ctx.controller.unpause();
+394
+395        // Then the contract should be unpaused.
+396        assert!(!ctx.controller.is_paused());
+397    }
+398
+399    #[test]
+400    fn test_buy_require_not_paused() {
+401        let mut ctx = TestContext::install_and_setup();
+402        // Given a paused contract.
+403        ctx.controller.pause();
+404        assert!(ctx.controller.is_paused());
+405
+406        // When a user tries to buy a name.
+407        ctx.set_caller(ctx.alice);
+408        let voucher = PaymentVoucher::new(
+409            U512::from(2000),
+410            "id_1",
+411            ctx.alice,
+412            vec![NameMintInfo::new(
+413                TOKEN_NAME,
+414                ctx.alice,
+415                ctx.token_expiration_time(),
+416                "",
+417            )],
+418            ctx.token_expiration_time(),
+419        );
+420        let signature = ctx.sign(&voucher);
+421        let result = ctx.controller.try_buy(voucher, signature);
+422
+423        // Then it should fail.
+424        assert_eq!(
+425            result,
+426            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+427        );
+428    }
+429
+430    #[test]
+431    fn test_renew_require_not_paused() {
+432        let mut ctx = TestContext::install_and_setup();
+433        // Given a paused contract.
+434        ctx.controller.pause();
+435        assert!(ctx.controller.is_paused());
+436
+437        // When a user tries to renew a name.
+438        ctx.set_caller(ctx.alice);
+439        let voucher = RenewalPaymentVoucher::new(
+440            U512::from(2000),
+441            "id_1",
+442            ctx.alice,
+443            vec![TokenRenewalInfo::new(
+444                generate_token_id(TOKEN_NAME),
+445                ctx.token_expiration_time(),
+446            )],
+447            ctx.token_expiration_time(),
+448        );
+449        let signature = ctx.sign(&voucher);
+450        let result = ctx.controller.try_renew(voucher, signature);
+451
+452        // Then it should fail.
+453        assert_eq!(
+454            result,
+455            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+456        );
+457    }
+458
+459    #[test]
+460    fn test_buy_and_renew_require_not_paused() {
+461        let mut ctx = TestContext::install_and_setup();
+462        // Given a paused contract.
+463        ctx.controller.pause();
+464        assert!(ctx.controller.is_paused());
+465
+466        // When a user tries to buy and renew names.
+467        ctx.set_caller(ctx.alice);
+468        let payment_voucher = PaymentVoucher::new(
+469            U512::from(2000),
+470            "id_1",
+471            ctx.alice,
+472            vec![NameMintInfo::new(
+473                TOKEN_NAME,
+474                ctx.alice,
+475                ctx.token_expiration_time(),
+476                "",
+477            )],
+478            ctx.token_expiration_time(),
+479        );
+480        let renewal_voucher = RenewalPaymentVoucher::new(
+481            U512::from(2000),
+482            "id_2",
+483            ctx.alice,
+484            vec![TokenRenewalInfo::new(
+485                generate_token_id(TOKEN_NAME),
+486                ctx.token_expiration_time(),
+487            )],
+488            ctx.token_expiration_time(),
+489        );
+490        let payment_signature = ctx.sign(&payment_voucher);
+491        let renewal_signature = ctx.sign(&renewal_voucher);
+492        let result = ctx.controller.try_buy_and_renew(
+493            payment_voucher,
+494            payment_signature,
+495            renewal_voucher,
+496            renewal_signature,
+497        );
+498
+499        // Then it should fail.
+500        assert_eq!(
+501            result,
+502            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+503        );
+504    }
+505
+506    #[test]
+507    fn test_set_signer_public_key() {
+508        let mut ctx = TestContext::install_and_setup();
+509        // Given a contract with an admin and a user.
+510        let (admin, user) = (ctx.admin, ctx.alice);
+511        // When the admin sets the signer public key.
+512        ctx.set_caller(admin);
+513        let result = ctx
+514            .controller
+515            .try_set_signer_public_key(ctx.env.public_key(&user));
+516        // Then it should succeed and emit an event.
+517        assert!(result.is_ok());
+518        assert!(ctx
+519            .env
+520            .emitted(&ctx.controller, SignerPublicKeyChanged::name()));
+521
+522        // When a non-admin tries to set the signer public key.
+523        ctx.set_caller(user);
+524        let result = ctx
+525            .controller
+526            .try_set_signer_public_key(ctx.env.public_key(&user));
+527        // Then it should fail.
+528        assert!(result.is_err());
+529    }
+530
+531    #[test]
+532    fn test_set_treasury() {
+533        let mut ctx = TestContext::install_and_setup();
+534        // Given a contract with an admin and two users.
+535        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
+536        // When the admin sets the treasury address.
+537        ctx.set_caller(admin);
+538        let result = ctx.controller.try_set_treasury(alice);
+539        // Then it should succeed and emit an event.
+540        assert!(result.is_ok());
+541        assert!(ctx
+542            .env
+543            .emitted(&ctx.controller, TreasuryAddressChanged::name()));
+544
+545        // When a non-admin tries to set the treasury address.
+546        ctx.set_caller(alice);
+547        let result = ctx.controller.try_set_treasury(bob);
+548        // Then it should fail.
+549        assert!(result.is_err());
+550    }
+551}
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/marketplace.rs.html b/docs/src/casper_name_contracts/contracts/marketplace.rs.html index 1b92876..0134a91 100644 --- a/docs/src/casper_name_contracts/contracts/marketplace.rs.html +++ b/docs/src/casper_name_contracts/contracts/marketplace.rs.html @@ -1,163 +1,81 @@ -marketplace.rs - source

casper_name_contracts/contracts/
marketplace.rs

-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
use odra::{
-    casper_types::{bytesrepr::Bytes, PublicKey},
-    prelude::*,
-};
-use odra_modules::access::Role;
-
-use crate::{
-    contracts::{controller::ControllerError, token_id::ToTokenId},
-    data_structures::SecondarySaleVoucher,
-};
-
-use super::{controller::BaseController, name_token::NameTokenContractRef};
-
-/// Secondary market smart contract. It handles the secondary market operations.
-#[odra::module]
-pub struct SecondaryMarket {
-    controller: SubModule<BaseController>,
-    name_token: External<NameTokenContractRef>,
-}
-
-#[odra::module]
-impl SecondaryMarket {
-    delegate! {
-        to self.controller {
-            fn has_role(&self, role: &Role, address: &Address) -> bool;
-            fn grant_role(&mut self, role: &Role, address: &Address);
-            fn revoke_role(&mut self, role: &Role, address: &Address);
-            fn set_signer_public_key(&mut self, signer: PublicKey);
-            fn set_treasury(&mut self, treasury: Address);
-            fn signer_public_key(&self) -> PublicKey;
-            fn pause(&mut self);
-            fn unpause(&mut self);
-            fn is_paused(&self) -> bool;
-        }
-    }
-
-    /// Initializes the secondary market with the signer public key, the treasury
-    /// address and the name token contract address.
-    pub fn init(&mut self, signer: PublicKey, treasury: Address, name_token: Address) {
-        if !name_token.is_contract() {
-            self.revert(ControllerError::ContractAddressExpected);
-        }
-        self.controller.init(signer, treasury);
-        self.name_token.set(name_token);
-    }
-
-    /// Payable. Buys name tokens from the secondary market.
-    #[odra(payable)]
-    pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes) {
-        self.controller.require_not_paused();
-        self.controller.process_payment_voucher(&voucher, signature);
-        for name in voucher.names {
-            let token_id = self.token_id(name.label);
-            let to = self.env().caller();
-            let from = name.owner;
-            self.name_token.transfer_from(from, to, token_id);
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use crate::contracts::marketplace::{SecondaryMarket, SecondaryMarketInitArgs};
-    use odra::host::Deployer;
-
-    #[test]
-    fn deploy_fails_if_account_set_as_name_token() {
-        let env = odra_test::env();
-        let signer = env.get_account(10);
-        let treasury = env.get_account(11);
-        let result = SecondaryMarket::try_deploy(
-            &env,
-            SecondaryMarketInitArgs {
-                signer: env.public_key(&signer),
-                treasury,
-                name_token: env.get_account(12), // Using an account instead of a contract address
-            },
-        );
-        assert!(result.is_err());
-    }
-}
-
\ No newline at end of file +marketplace.rs - source

casper_name_contracts/contracts/
marketplace.rs

1use odra::{
+2    casper_types::{bytesrepr::Bytes, PublicKey},
+3    prelude::*,
+4};
+5use odra_modules::access::Role;
+6
+7use crate::{
+8    contracts::{controller::ControllerError, token_id::ToTokenId},
+9    data_structures::SecondarySaleVoucher,
+10};
+11
+12use super::{controller::BaseController, name_token::NameTokenContractRef};
+13
+14/// Secondary market smart contract. It handles the secondary market operations.
+15#[odra::module]
+16pub struct SecondaryMarket {
+17    controller: SubModule<BaseController>,
+18    name_token: External<NameTokenContractRef>,
+19}
+20
+21#[odra::module]
+22impl SecondaryMarket {
+23    delegate! {
+24        to self.controller {
+25            fn has_role(&self, role: &Role, address: &Address) -> bool;
+26            fn grant_role(&mut self, role: &Role, address: &Address);
+27            fn revoke_role(&mut self, role: &Role, address: &Address);
+28            fn set_signer_public_key(&mut self, signer: PublicKey);
+29            fn set_treasury(&mut self, treasury: Address);
+30            fn signer_public_key(&self) -> PublicKey;
+31            fn pause(&mut self);
+32            fn unpause(&mut self);
+33            fn is_paused(&self) -> bool;
+34        }
+35    }
+36
+37    /// Initializes the secondary market with the signer public key, the treasury
+38    /// address and the name token contract address.
+39    pub fn init(&mut self, signer: PublicKey, treasury: Address, name_token: Address) {
+40        if !name_token.is_contract() {
+41            self.revert(ControllerError::ContractAddressExpected);
+42        }
+43        self.controller.init(signer, treasury);
+44        self.name_token.set(name_token);
+45    }
+46
+47    /// Payable. Buys name tokens from the secondary market.
+48    #[odra(payable)]
+49    pub fn buy(&mut self, voucher: SecondarySaleVoucher, signature: Bytes) {
+50        self.controller.require_not_paused();
+51        self.controller.process_payment_voucher(&voucher, signature);
+52        for name in voucher.names {
+53            let token_id = self.token_id(name.label);
+54            let to = self.env().caller();
+55            let from = name.owner;
+56            self.name_token.transfer_from(from, to, token_id);
+57        }
+58    }
+59}
+60
+61#[cfg(test)]
+62mod tests {
+63    use crate::contracts::marketplace::{SecondaryMarket, SecondaryMarketInitArgs};
+64    use odra::host::Deployer;
+65
+66    #[test]
+67    fn deploy_fails_if_account_set_as_name_token() {
+68        let env = odra_test::env();
+69        let signer = env.get_account(10);
+70        let treasury = env.get_account(11);
+71        let result = SecondaryMarket::try_deploy(
+72            &env,
+73            SecondaryMarketInitArgs {
+74                signer: env.public_key(&signer),
+75                treasury,
+76                name_token: env.get_account(12), // Using an account instead of a contract address
+77            },
+78        );
+79        assert!(result.is_err());
+80    }
+81}
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/mod.rs.html b/docs/src/casper_name_contracts/contracts/mod.rs.html index f4cf452..643a5ad 100644 --- a/docs/src/casper_name_contracts/contracts/mod.rs.html +++ b/docs/src/casper_name_contracts/contracts/mod.rs.html @@ -1,17 +1,8 @@ -mod.rs - source

casper_name_contracts/contracts/
mod.rs

-1
-2
-3
-4
-5
-6
-7
-8
pub mod controller;
-pub mod marketplace;
-pub mod name_token;
-pub mod registrar;
-pub mod resolver;
-pub mod reverse_resolver;
-pub mod token_id;
-pub(crate) mod utils;
-
\ No newline at end of file +mod.rs - source

casper_name_contracts/contracts/
mod.rs

1pub mod controller;
+2pub mod marketplace;
+3pub mod name_token;
+4pub mod registrar;
+5pub mod resolver;
+6pub mod reverse_resolver;
+7pub mod token_id;
+8pub(crate) mod utils;
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/name_token.rs.html b/docs/src/casper_name_contracts/contracts/name_token.rs.html index a765bfc..11b9710 100644 --- a/docs/src/casper_name_contracts/contracts/name_token.rs.html +++ b/docs/src/casper_name_contracts/contracts/name_token.rs.html @@ -1,1317 +1,658 @@ -name_token.rs - source

casper_name_contracts/contracts/
name_token.rs

-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
#![allow(unused_variables)]
-use crate::data_structures::NameTokenMetadata;
-use odra::casper_types::bytesrepr::Bytes;
-use odra::casper_types::U256;
-use odra::module::Revertible;
-use odra::{prelude::*, ContractRef};
-use odra_modules::access::Ownable2Step;
-use odra_modules::cep95::{CEP95Interface, Cep95, Error as Cep95Error};
-
-use super::resolver::ResolverContractRef;
-
-/// NameToken contract. It is a CEP95 token with additional functionalities.
-#[odra::module(errors = NameTokenError)]
-pub struct NameToken {
-    token: SubModule<Cep95>,
-    ownable: SubModule<Ownable2Step>,
-    default_resolver: External<ResolverContractRef>,
-    max_supply: Var<u64>,
-    minted_tokens_count: Var<u64>,
-    whitelist: Mapping<Address, bool>,
-}
-
-#[odra::module]
-impl NameToken {
-    delegate! {
-        to self.token {
-            fn name(&self) -> String;
-            fn symbol(&self) -> String;
-            fn balance_of(&self, owner: Address) -> U256;
-            fn owner_of(&self, token_id: U256) -> Option<Address>;
-            fn safe_transfer_from(&mut self, from: Address, to: Address, token_id: U256, data: Option<Bytes>);
-            fn approve(&mut self, spender: Address, token_id: U256);
-            fn revoke_approval(&mut self, token_id: U256);
-            fn approved_for(&self, token_id: U256) -> Option<Address>;
-            fn approve_for_all(&mut self, operator: Address);
-            fn revoke_approval_for_all(&mut self, operator: Address);
-            fn is_approved_for_all(&self, owner: Address, operator: Address) -> bool;
-            fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>;
-        }
-
-        to self.ownable {
-            fn get_owner(&self) -> Address;
-            fn get_pending_owner(&self) -> Option<Address>;
-            fn transfer_ownership(&mut self, new_owner: &Address);
-            fn accept_ownership(&mut self);
-            fn renounce_ownership(&mut self);
-        }
-    }
-
-    /// Initializes CEP95 with the given name and symbol.
-    pub fn init(&mut self, name: String, symbol: String, max_supply: u64) {
-        let caller = self.env().caller();
-
-        self.token.symbol.set(symbol);
-        self.token.name.set(name);
-        self.max_supply.set(max_supply);
-        self.ownable.init(caller);
-    }
-
-    pub fn token_exists(&self, token_id: U256) -> bool {
-        self.token.exists(&token_id)
-    }
-
-    pub fn mint(
-        &mut self,
-        recipient: Address,
-        token_id: U256,
-        token_metadata: Vec<(String, String)>,
-    ) {
-        let caller = self.env().caller();
-        self.assert_whitelisted(&caller);
-
-        let minted_tokens_count = self.minted_tokens_count.get_or_default();
-        if minted_tokens_count >= self.max_supply.get_or_default() {
-            self.revert(NameTokenError::TokenSupplyDepleted);
-        }
-        if self.token.exists(&token_id) {
-            self.revert(NameTokenError::InvalidTokenIdentifier);
-        }
-        // mint the token
-        self.token.mint(recipient, token_id, token_metadata);
-        // increment the minted tokens count
-        self.minted_tokens_count.set(minted_tokens_count + 1);
-    }
-
-    pub fn burn(&mut self, token_id: U256) {
-        let caller = self.env().caller();
-        self.assert_whitelisted(&caller);
-
-        // invalidate resolutions if the resolver is the default resolver and update metadata
-        let mut metadata = self.wrapped_metadata(token_id);
-        if let Some(resolver) = metadata.resolver().unwrap_or_revert(self) {
-            if &resolver == self.default_resolver.address() {
-                self.default_resolver.invalidate_resolutions(token_id);
-            }
-        }
-        metadata.clear_resolver();
-        self.set_token_metadata(token_id, metadata.to_vec());
-
-        // burn the token
-        self.token.burn(token_id);
-    }
-
-    pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>) {
-        let caller = self.env().caller();
-        self.assert_whitelisted(&caller);
-
-        for token_id in token_ids {
-            if !self.is_token_valid(token_id) {
-                self.revert(NameTokenError::ExpiredTokenTransfer);
-            }
-
-            let owner = self
-                .token
-                .owner_of(token_id)
-                .unwrap_or_revert_with(self, Cep95Error::ValueNotSet);
-            self.token.raw_transfer_from(owner, recipient, token_id);
-            // if called by an operator
-            if caller != owner {
-                self.cleanup(token_id);
-            }
-        }
-    }
-
-    pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256) {
-        if !self.is_token_valid(token_id) {
-            self.revert(NameTokenError::ExpiredTokenTransfer);
-        }
-
-        let caller = self.env().caller();
-        let owner = self
-            .token
-            .owner_of(token_id)
-            .unwrap_or_revert_with(self, Cep95Error::ValueNotSet);
-        // if called by an operator
-        self.token.transfer_from(from, to, token_id);
-        if caller != owner {
-            self.cleanup(token_id);
-        }
-    }
-
-    pub fn set_token_metadata(&mut self, token_id: U256, token_metadata: Vec<(String, String)>) {
-        let caller = self.env().caller();
-        self.assert_whitelisted(&caller);
-        self.token.set_metadata(token_id, token_metadata);
-    }
-
-    pub fn resolver(&self, token_id: U256) -> Option<Address> {
-        let metadata: NameTokenMetadata = self.wrapped_metadata(token_id);
-        metadata.resolver().unwrap_or_revert(self)
-    }
-
-    pub fn set_resolver(&mut self, token_id: U256, resolver: Address) {
-        if self.token.owner_of(token_id) != Some(self.env().caller()) {
-            self.revert(NameTokenError::InvalidTokenOwner);
-        }
-        let mut metadata: NameTokenMetadata = self.wrapped_metadata(token_id);
-        metadata.set_resolver(resolver);
-        self.token.set_metadata(token_id, metadata.to_vec());
-    }
-
-    pub fn assert_is_owner(&self, token_id: U256, address: Address) {
-        let owner = self.token.owner_of(token_id);
-        if owner != Some(address) {
-            self.revert(NameTokenError::InvalidTokenOwner);
-        }
-    }
-
-    pub fn is_token_valid(&self, token_id: U256) -> bool {
-        if !self.token.exists(&token_id) {
-            return false;
-        }
-
-        let metadata: NameTokenMetadata = self.wrapped_metadata(token_id);
-        if metadata.expiration() < self.env().get_block_time() {
-            return false;
-        }
-        true
-    }
-
-    /// Only admin. Set the default resolver.
-    pub fn set_default_resolver(&mut self, resolver: Address) {
-        let caller = self.env().caller();
-        self.assert_whitelisted(&caller);
-        if !resolver.is_contract() {
-            self.revert(NameTokenError::InvalidResolver);
-        }
-        self.default_resolver.set(resolver);
-    }
-
-    /// Get the default resolver.
-    pub fn get_default_resolver(&self) -> Address {
-        *self.default_resolver.address()
-    }
-
-    pub fn whitelist(&mut self, address: Address) {
-        let caller = self.env().caller();
-        self.ownable.assert_owner(&caller);
-        if self.is_whitelisted(&address) {
-            self.revert(NameTokenError::WhitelistedAlready);
-        }
-        self.whitelist.set(&address, true);
-    }
-
-    pub fn revoke_whitelist(&mut self, address: Address) {
-        let caller = self.env().caller();
-        self.ownable.assert_owner(&caller);
-        if !self.is_whitelisted(&address) {
-            self.revert(NameTokenError::NotWhitelisted);
-        }
-        self.whitelist.set(&address, false);
-    }
-}
-
-impl NameToken {
-    #[inline]
-    pub fn wrapped_metadata(&self, token_id: U256) -> NameTokenMetadata {
-        let metadata = self.token.token_metadata(token_id);
-        NameTokenMetadata::try_from(metadata).unwrap_or_revert(self)
-    }
-
-    #[inline]
-    fn is_whitelisted(&self, address: &Address) -> bool {
-        self.whitelist.get(address).unwrap_or_default()
-    }
-
-    #[inline]
-    fn assert_whitelisted(&self, address: &Address) {
-        if !self.is_whitelisted(address) {
-            self.revert(NameTokenError::NotWhitelisted);
-        }
-    }
-
-    fn cleanup(&mut self, token_id: U256) {
-        let mut metadata = self.wrapped_metadata(token_id);
-        let resolver = metadata.resolver().unwrap_or_revert(self);
-        let default_resolver_address = *self.default_resolver.address();
-        if resolver != Some(default_resolver_address) {
-            metadata.set_resolver(default_resolver_address);
-            self.token.set_metadata(token_id, metadata.to_vec());
-        }
-        self.default_resolver.invalidate_resolutions(token_id);
-    }
-}
-
-#[odra::odra_error]
-pub enum NameTokenError {
-    NotWhitelisted = 1301,
-    InvalidTokenOwner = 1302,
-    ExpiredTokenTransfer = 1303,
-    InvalidTokenIdentifier = 1304,
-    InvalidResolver = 1305,
-    TokenSupplyDepleted = 1306,
-    WhitelistedAlready = 1307,
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use crate::test_context::{generate_token_id, TestContext, INIT_TIME, TOKEN_EXPIRATION};
-
-    #[test]
-    fn test_supply_depletion() {
-        // Given a token with max supply of 10
-        let max_supply = 10u64;
-        let mut ctx = TestContext::install_raw_with_supply(max_supply);
-        ctx.whitelist_admin_in_name_token();
-        let token_hash = "token_hash";
-
-        for i in 0..max_supply {
-            // When minting a token
-            ctx.token.mint(ctx.alice, i.into(), vec![]);
-        }
-        // When trying to mint a new token
-        let result = ctx.token.try_mint(ctx.alice, max_supply.into(), vec![]);
-        // Then it should fail with TokenSupplyDepleted error
-        assert_eq!(
-            result.unwrap_err(),
-            NameTokenError::TokenSupplyDepleted.into()
-        );
-    }
-
-    #[test]
-    fn test_token_exists() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        let token_hash = "token_hash";
-        let token_id = generate_token_id(token_hash);
-        // Token should not exist
-        assert_eq!(ctx.token.token_exists(token_id), false);
-
-        // Mint a token
-        let token_owner = ctx.alice;
-        mint_for(&mut ctx, token_owner, token_hash);
-        // Then the token should exist
-        assert_eq!(ctx.token.token_exists(token_id), true);
-
-        // Burn the token
-        whitelist_accounts(&mut ctx, vec![token_owner]);
-        ctx.set_caller(token_owner);
-        assert!(try_burn(&mut ctx, token_hash).is_ok());
-        // Then the token should not exist anymore
-        assert_eq!(ctx.token.token_exists(token_id), false);
-    }
-
-    #[test]
-    fn owner_cannot_burn_until_whitelisted() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        // Given a token owned by alice
-        let token_hash = "token_hash";
-        let token_id = generate_token_id(token_hash);
-        let token_owner = ctx.alice;
-        mint_for(&mut ctx, token_owner, token_hash);
-
-        // Then burning token by the owner fails
-        ctx.set_caller(token_owner);
-        let result = try_burn(&mut ctx, token_hash);
-        assert_eq!(result.err(), Some(NameTokenError::NotWhitelisted.into()));
-
-        // When whitelist the token owner
-        whitelist_accounts(&mut ctx, vec![token_owner]);
-        // Then the token owner should be able to burn the token
-        ctx.set_caller(token_owner);
-        let result = try_burn(&mut ctx, token_hash);
-        assert!(result.is_ok());
-    }
-
-    #[test]
-    fn anyone_whitelisted_can_burn() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        let (token_owner, anyone) = (ctx.alice, ctx.anyone);
-        // Given a token owned by the token owner
-        let token_hash = "token_hash";
-        mint_for(&mut ctx, token_owner, token_hash);
-
-        // Then anyone should not be able to burn the token
-        ctx.set_caller(anyone);
-        let result = try_burn(&mut ctx, token_hash);
-        assert_eq!(result.err(), Some(NameTokenError::NotWhitelisted.into()));
-
-        // When whitelist the anyone account
-        whitelist_accounts(&mut ctx, vec![anyone]);
-        // Then the anyone account should be able to burn the token
-        ctx.set_caller(anyone);
-        let result = try_burn(&mut ctx, token_hash);
-        assert!(result.is_ok());
-    }
-
-    #[test]
-    fn burning_burnt_token_should_fail() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        // Given a token owned by alice
-        let alice = ctx.alice;
-        let token_hash = "token hash";
-        let token_id = generate_token_id(token_hash);
-        mint_for(&mut ctx, alice, token_hash);
-        // When whitelist the token owner
-        whitelist_accounts(&mut ctx, vec![alice]);
-        assert!(ctx.token.token_exists(token_id));
-        ctx.set_caller(alice);
-        // Then the token owner should be able to burn the token
-        assert!(try_burn(&mut ctx, token_hash).is_ok());
-        // Then burning the token again should fail
-        assert!(try_burn(&mut ctx, token_hash).is_err());
-    }
-
-    #[test]
-    fn burning_non_existent_token_should_fail() {
-        let mut ctx = TestContext::install_raw();
-        let alice = ctx.alice;
-        // Given a non existent token
-        let token_hash = "token hash";
-        let token_id = generate_token_id(token_hash);
-        assert!(!ctx.token.token_exists(token_id));
-
-        // Then burning the token should fail
-        whitelist_accounts(&mut ctx, vec![alice]);
-        ctx.set_caller(alice);
-        assert!(try_burn(&mut ctx, token_hash).is_err());
-    }
-
-    #[test]
-    fn admin_transfer_of_multiple_tokens_should_work() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        let (alice, bob) = (ctx.alice, ctx.bob);
-        // Given two tokens owned by alice
-        let token_hashes = vec!["token_hash1".to_string(), "token_hash2".to_string()];
-        let token_ids = token_hashes
-            .iter()
-            .map(|token_hash| generate_token_id(token_hash))
-            .collect::<Vec<_>>();
-        mint_for(&mut ctx, alice, &token_hashes[0]);
-        mint_for(&mut ctx, alice, &token_hashes[1]);
-
-        // When admin transfer the tokens to bob
-        whitelist_accounts(&mut ctx, vec![alice]);
-        ctx.set_caller(alice);
-        ctx.token.admin_transfer(bob, token_ids.clone());
-        // Then bob should be the owner of the tokens
-        assert!(ctx.token.try_assert_is_owner(token_ids[0], bob).is_ok());
-        assert!(ctx.token.try_assert_is_owner(token_ids[1], bob).is_ok());
-    }
-
-    #[test]
-    fn admin_transfer_of_multiple_tokens_should_not_work_for_non_whitelisted_account() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        let (alice, bob) = (ctx.alice, ctx.bob);
-        // Given two tokens owned by alice
-        let token_hashes = vec!["token_hash1".to_string(), "token_hash2".to_string()];
-        let token_ids = token_hashes
-            .iter()
-            .map(|token_hash| generate_token_id(token_hash))
-            .collect::<Vec<_>>();
-        mint_for(&mut ctx, alice, &token_hashes[0]);
-        mint_for(&mut ctx, alice, &token_hashes[1]);
-
-        // When non whitelisted account tries to transfer the tokens
-        ctx.set_caller(alice);
-        assert_eq!(
-            ctx.token.try_admin_transfer(bob, token_ids.clone()),
-            Err(NameTokenError::NotWhitelisted.into())
-        );
-
-        // Then bob should not be the owner of the tokens
-        assert!(ctx.token.try_assert_is_owner(token_ids[0], bob).is_err());
-        assert!(ctx.token.try_assert_is_owner(token_ids[1], bob).is_err());
-    }
-
-    #[test]
-    fn admin_transfer_of_non_existent_token_should_fail() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        let (alice, bob) = (ctx.alice, ctx.bob);
-        // Given two tokens owned by alice
-        let token_hashes = vec![
-            "token_hash1".to_string(),
-            "token_hash2".to_string(),
-            "token_hash3".to_string(),
-        ];
-        let token_ids = token_hashes
-            .iter()
-            .map(|token_hash| generate_token_id(token_hash))
-            .collect::<Vec<_>>();
-        mint_for(&mut ctx, alice, &token_hashes[0]);
-        mint_for(&mut ctx, alice, &token_hashes[1]);
-
-        // When admin transfer the tokens to bob
-        whitelist_accounts(&mut ctx, vec![alice]);
-        ctx.set_caller(alice);
-        // Then the transfer fails
-        assert!(ctx
-            .token
-            .try_admin_transfer(bob, token_ids.clone())
-            .is_err());
-        // Then the existing tokens should not be transferred
-        assert!(ctx.token.try_assert_is_owner(token_ids[0], bob).is_err());
-        assert!(ctx.token.try_assert_is_owner(token_ids[1], bob).is_err());
-    }
-
-    #[test]
-    fn only_owner_can_set_resolver() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        let (alice, bob) = (ctx.alice, ctx.bob);
-        // Given a token owned by alice
-        let token_hash = "token_hash";
-        let token_id = generate_token_id(token_hash);
-        mint_for(&mut ctx, alice, token_hash);
-        // Then the token has no resolver
-        assert_eq!(ctx.token.resolver(token_id), None);
-
-        // When bob tries to set the resolver
-        let resolver = bob;
-        ctx.set_caller(bob);
-        // Then the operation should fail
-        assert_eq!(
-            ctx.token.try_set_resolver(token_id, resolver),
-            Err(NameTokenError::InvalidTokenOwner.into())
-        );
-        // When alice sets the resolver
-        ctx.set_caller(alice);
-        ctx.token.set_resolver(token_id, resolver);
-        // Then the resolver should be set
-        assert_eq!(ctx.token.resolver(token_id), Some(resolver));
-    }
-
-    #[test]
-    fn test_is_token_valid() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        let alice = ctx.alice;
-
-        // Given a token with expiration time in furure
-        let token_hash = "token_hash";
-        let token_id = generate_token_id(token_hash);
-        let expiration = INIT_TIME + 100;
-        let asset_uri = "https://example.com/asset";
-        ctx.set_caller(ctx.admin);
-        let token_meta_data =
-            NameTokenMetadata::with_no_resolver(token_hash, expiration, asset_uri);
-        ctx.token.mint(alice, token_id, token_meta_data.to_vec());
-        // Then the token should be valid
-        assert!(ctx.token.is_token_valid(token_id));
-        // When the expiration time is passed
-        ctx.advance_block_time(expiration + 1);
-        // Then the token should not be valid
-        assert!(!ctx.token.is_token_valid(token_id));
-    }
-
-    #[test]
-    fn burnt_token_is_invalid() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        let alice = ctx.alice;
-
-        // Given a token with expiration time in furure
-        let name = "token hash";
-        let token_id = generate_token_id(name);
-        let expiration = INIT_TIME + 100;
-        let asset_uri = "https://example.com/asset";
-        ctx.set_caller(ctx.admin);
-        let token_meta_data = NameTokenMetadata::with_no_resolver(name, expiration, asset_uri);
-        ctx.token.mint(alice, token_id, token_meta_data.to_vec());
-        // Then the token should be valid
-        assert!(ctx.token.is_token_valid(token_id));
-
-        // When the token is burnt
-        whitelist_accounts(&mut ctx, vec![alice]);
-        ctx.set_caller(alice);
-        assert!(try_burn(&mut ctx, name).is_ok());
-        // Then the token should not be valid
-        assert!(!ctx.token.is_token_valid(token_id));
-    }
-
-    #[test]
-    fn only_whitelisted_user_can_set_default_resolver() {
-        let mut ctx = TestContext::install_raw();
-
-        let resolver =
-            Address::new("hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a")
-                .unwrap();
-        assert!(ctx.token.try_set_default_resolver(resolver).is_err());
-
-        ctx.whitelist_admin_in_name_token();
-        assert!(ctx.token.try_set_default_resolver(resolver).is_ok());
-
-        assert_eq!(ctx.token.get_default_resolver(), resolver);
-    }
-
-    #[test]
-    fn transfer_from_operator_resets_resolver() {
-        let mut ctx = TestContext::install_and_setup();
-        let (alice, bob, anyone) = (ctx.alice, ctx.bob, ctx.anyone);
-        let token_label = "token-label";
-        let full_domain = format!("{}.cspr", token_label);
-
-        // Given Alice has a token.
-        mint_for(&mut ctx, alice, token_label);
-
-        // Alice sets the resolver.
-        ctx.set_caller(alice);
-        ctx.default_resolver
-            .set_resolution(full_domain.clone(), Some(anyone));
-
-        // Then the resolver points at some address.
-        assert_eq!(
-            ctx.default_resolver.resolve(full_domain.clone()),
-            Some(anyone)
-        );
-
-        // Given Alice sets Bob as an operator.
-        ctx.token.approve_for_all(bob);
-
-        // Then Bob is an operator for Alice.
-        assert!(ctx.token.is_approved_for_all(alice, bob));
-
-        // When Bob transfers the token to himself.
-        let token_id = generate_token_id(token_label);
-        ctx.set_caller(bob);
-        ctx.token.transfer_from(alice, bob, token_id);
-        assert!(ctx.token.try_assert_is_owner(token_id, bob).is_ok());
-
-        // Then the resolver is reset.
-        assert_eq!(
-            ctx.default_resolver.resolve(full_domain),
-            None,
-            "Resolver should be reset after transfer from operator"
-        );
-    }
-
-    #[test]
-    fn test_revoke_whitelist() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        let alice = ctx.alice;
-
-        // Given Alice is whitelisted
-        whitelist_accounts(&mut ctx, vec![alice]);
-
-        // When admin revokes Alice's whitelist
-        ctx.set_caller(ctx.admin);
-        let result = ctx.token.try_revoke_whitelist(alice);
-        // Then it should succeed
-        assert!(result.is_ok());
-
-        // When admin tries to revoke Alice's whitelist again
-        let result = ctx.token.try_revoke_whitelist(alice);
-        // Then it should fail with NotWhitelisted error
-        assert_eq!(result.err(), Some(NameTokenError::NotWhitelisted.into()));
-    }
-
-    #[test]
-    fn test_whitelist() {
-        let mut ctx = TestContext::install_raw();
-        ctx.whitelist_admin_in_name_token();
-        let alice = ctx.alice;
-
-        // When admin tries to whitelist Alice
-        ctx.set_caller(ctx.admin);
-        let result = ctx.token.try_whitelist(alice);
-        // Then it should succeed
-        assert!(result.is_ok());
-
-        // When admin tries to whitelist Alice again
-        let result = ctx.token.try_whitelist(alice);
-        // Then it should fail with WhitelistedAlready error
-        assert_eq!(
-            result.err(),
-            Some(NameTokenError::WhitelistedAlready.into())
-        );
-    }
-
-    fn mint_for(ctx: &mut TestContext, owner: Address, name: &str) -> U256 {
-        ctx.set_caller(ctx.admin);
-        let token_metadata =
-            NameTokenMetadata::with_no_resolver(name, INIT_TIME + TOKEN_EXPIRATION, "");
-        let token_id = generate_token_id(name);
-        ctx.token.mint(owner, token_id, token_metadata.to_vec());
-        token_id
-    }
-
-    fn whitelist_accounts(ctx: &mut TestContext, accounts: Vec<Address>) {
-        ctx.set_caller(ctx.admin);
-        for account in accounts {
-            ctx.token.whitelist(account);
-        }
-    }
-
-    fn try_burn(ctx: &mut TestContext, token_hash: &str) -> OdraResult<()> {
-        let token_id = generate_token_id(token_hash);
-        ctx.token.try_burn(token_id)
-    }
-}
-
\ No newline at end of file +name_token.rs - source

casper_name_contracts/contracts/
name_token.rs

1#![allow(unused_variables)]
+2use crate::data_structures::NameTokenMetadata;
+3use odra::casper_types::bytesrepr::Bytes;
+4use odra::casper_types::U256;
+5use odra::module::Revertible;
+6use odra::{prelude::*, ContractRef};
+7use odra_modules::access::Ownable2Step;
+8use odra_modules::cep95::{CEP95Interface, Cep95, Error as Cep95Error};
+9
+10use super::resolver::ResolverContractRef;
+11
+12/// NameToken contract. It is a CEP95 token with additional functionalities.
+13#[odra::module(errors = NameTokenError)]
+14pub struct NameToken {
+15    token: SubModule<Cep95>,
+16    ownable: SubModule<Ownable2Step>,
+17    default_resolver: External<ResolverContractRef>,
+18    max_supply: Var<u64>,
+19    minted_tokens_count: Var<u64>,
+20    whitelist: Mapping<Address, bool>,
+21}
+22
+23#[odra::module]
+24impl NameToken {
+25    delegate! {
+26        to self.token {
+27            fn name(&self) -> String;
+28            fn symbol(&self) -> String;
+29            fn balance_of(&self, owner: Address) -> U256;
+30            fn owner_of(&self, token_id: U256) -> Option<Address>;
+31            fn safe_transfer_from(&mut self, from: Address, to: Address, token_id: U256, data: Option<Bytes>);
+32            fn approve(&mut self, spender: Address, token_id: U256);
+33            fn revoke_approval(&mut self, token_id: U256);
+34            fn approved_for(&self, token_id: U256) -> Option<Address>;
+35            fn approve_for_all(&mut self, operator: Address);
+36            fn revoke_approval_for_all(&mut self, operator: Address);
+37            fn is_approved_for_all(&self, owner: Address, operator: Address) -> bool;
+38            fn token_metadata(&self, token_id: U256) -> Vec<(String, String)>;
+39        }
+40
+41        to self.ownable {
+42            fn get_owner(&self) -> Address;
+43            fn get_pending_owner(&self) -> Option<Address>;
+44            fn transfer_ownership(&mut self, new_owner: &Address);
+45            fn accept_ownership(&mut self);
+46            fn renounce_ownership(&mut self);
+47        }
+48    }
+49
+50    /// Initializes CEP95 with the given name and symbol.
+51    pub fn init(&mut self, name: String, symbol: String, max_supply: u64) {
+52        let caller = self.env().caller();
+53
+54        self.token.symbol.set(symbol);
+55        self.token.name.set(name);
+56        self.max_supply.set(max_supply);
+57        self.ownable.init(caller);
+58    }
+59
+60    pub fn token_exists(&self, token_id: U256) -> bool {
+61        self.token.exists(&token_id)
+62    }
+63
+64    pub fn mint(
+65        &mut self,
+66        recipient: Address,
+67        token_id: U256,
+68        token_metadata: Vec<(String, String)>,
+69    ) {
+70        let caller = self.env().caller();
+71        self.assert_whitelisted(&caller);
+72
+73        let minted_tokens_count = self.minted_tokens_count.get_or_default();
+74        if minted_tokens_count >= self.max_supply.get_or_default() {
+75            self.revert(NameTokenError::TokenSupplyDepleted);
+76        }
+77        if self.token.exists(&token_id) {
+78            self.revert(NameTokenError::InvalidTokenIdentifier);
+79        }
+80        // mint the token
+81        self.token.mint(recipient, token_id, token_metadata);
+82        // increment the minted tokens count
+83        self.minted_tokens_count.set(minted_tokens_count + 1);
+84    }
+85
+86    pub fn burn(&mut self, token_id: U256) {
+87        let caller = self.env().caller();
+88        self.assert_whitelisted(&caller);
+89
+90        // invalidate resolutions if the resolver is the default resolver and update metadata
+91        let mut metadata = self.wrapped_metadata(token_id);
+92        if let Some(resolver) = metadata.resolver().unwrap_or_revert(self) {
+93            if &resolver == self.default_resolver.address() {
+94                self.default_resolver.invalidate_resolutions(token_id);
+95            }
+96        }
+97        metadata.clear_resolver();
+98        self.set_token_metadata(token_id, metadata.to_vec());
+99
+100        // burn the token
+101        self.token.burn(token_id);
+102    }
+103
+104    pub fn admin_transfer(&mut self, recipient: Address, token_ids: Vec<U256>) {
+105        let caller = self.env().caller();
+106        self.assert_whitelisted(&caller);
+107
+108        for token_id in token_ids {
+109            if !self.is_token_valid(token_id) {
+110                self.revert(NameTokenError::ExpiredTokenTransfer);
+111            }
+112
+113            let owner = self
+114                .token
+115                .owner_of(token_id)
+116                .unwrap_or_revert_with(self, Cep95Error::ValueNotSet);
+117            self.token.raw_transfer_from(owner, recipient, token_id);
+118            // if called by an operator
+119            if caller != owner {
+120                self.cleanup(token_id);
+121            }
+122        }
+123    }
+124
+125    pub fn transfer_from(&mut self, from: Address, to: Address, token_id: U256) {
+126        if !self.is_token_valid(token_id) {
+127            self.revert(NameTokenError::ExpiredTokenTransfer);
+128        }
+129
+130        let caller = self.env().caller();
+131        let owner = self
+132            .token
+133            .owner_of(token_id)
+134            .unwrap_or_revert_with(self, Cep95Error::ValueNotSet);
+135        // if called by an operator
+136        self.token.transfer_from(from, to, token_id);
+137        if caller != owner {
+138            self.cleanup(token_id);
+139        }
+140    }
+141
+142    pub fn set_token_metadata(&mut self, token_id: U256, token_metadata: Vec<(String, String)>) {
+143        let caller = self.env().caller();
+144        self.assert_whitelisted(&caller);
+145        self.token.set_metadata(token_id, token_metadata);
+146    }
+147
+148    pub fn resolver(&self, token_id: U256) -> Option<Address> {
+149        let metadata: NameTokenMetadata = self.wrapped_metadata(token_id);
+150        metadata.resolver().unwrap_or_revert(self)
+151    }
+152
+153    pub fn set_resolver(&mut self, token_id: U256, resolver: Address) {
+154        if self.token.owner_of(token_id) != Some(self.env().caller()) {
+155            self.revert(NameTokenError::InvalidTokenOwner);
+156        }
+157        let mut metadata: NameTokenMetadata = self.wrapped_metadata(token_id);
+158        metadata.set_resolver(resolver);
+159        self.token.set_metadata(token_id, metadata.to_vec());
+160    }
+161
+162    pub fn assert_is_owner(&self, token_id: U256, address: Address) {
+163        let owner = self.token.owner_of(token_id);
+164        if owner != Some(address) {
+165            self.revert(NameTokenError::InvalidTokenOwner);
+166        }
+167    }
+168
+169    pub fn is_token_valid(&self, token_id: U256) -> bool {
+170        if !self.token.exists(&token_id) {
+171            return false;
+172        }
+173
+174        let metadata: NameTokenMetadata = self.wrapped_metadata(token_id);
+175        if metadata.expiration() < self.env().get_block_time() {
+176            return false;
+177        }
+178        true
+179    }
+180
+181    /// Only admin. Set the default resolver.
+182    pub fn set_default_resolver(&mut self, resolver: Address) {
+183        let caller = self.env().caller();
+184        self.assert_whitelisted(&caller);
+185        if !resolver.is_contract() {
+186            self.revert(NameTokenError::InvalidResolver);
+187        }
+188        self.default_resolver.set(resolver);
+189    }
+190
+191    /// Get the default resolver.
+192    pub fn get_default_resolver(&self) -> Address {
+193        *self.default_resolver.address()
+194    }
+195
+196    pub fn whitelist(&mut self, address: Address) {
+197        let caller = self.env().caller();
+198        self.ownable.assert_owner(&caller);
+199        if self.is_whitelisted(&address) {
+200            self.revert(NameTokenError::WhitelistedAlready);
+201        }
+202        self.whitelist.set(&address, true);
+203    }
+204
+205    pub fn revoke_whitelist(&mut self, address: Address) {
+206        let caller = self.env().caller();
+207        self.ownable.assert_owner(&caller);
+208        if !self.is_whitelisted(&address) {
+209            self.revert(NameTokenError::NotWhitelisted);
+210        }
+211        self.whitelist.set(&address, false);
+212    }
+213}
+214
+215impl NameToken {
+216    #[inline]
+217    pub fn wrapped_metadata(&self, token_id: U256) -> NameTokenMetadata {
+218        let metadata = self.token.token_metadata(token_id);
+219        NameTokenMetadata::try_from(metadata).unwrap_or_revert(self)
+220    }
+221
+222    #[inline]
+223    fn is_whitelisted(&self, address: &Address) -> bool {
+224        self.whitelist.get(address).unwrap_or_default()
+225    }
+226
+227    #[inline]
+228    fn assert_whitelisted(&self, address: &Address) {
+229        if !self.is_whitelisted(address) {
+230            self.revert(NameTokenError::NotWhitelisted);
+231        }
+232    }
+233
+234    fn cleanup(&mut self, token_id: U256) {
+235        let mut metadata = self.wrapped_metadata(token_id);
+236        let resolver = metadata.resolver().unwrap_or_revert(self);
+237        let default_resolver_address = *self.default_resolver.address();
+238        if resolver != Some(default_resolver_address) {
+239            metadata.set_resolver(default_resolver_address);
+240            self.token.set_metadata(token_id, metadata.to_vec());
+241        }
+242        self.default_resolver.invalidate_resolutions(token_id);
+243    }
+244}
+245
+246#[odra::odra_error]
+247pub enum NameTokenError {
+248    NotWhitelisted = 1301,
+249    InvalidTokenOwner = 1302,
+250    ExpiredTokenTransfer = 1303,
+251    InvalidTokenIdentifier = 1304,
+252    InvalidResolver = 1305,
+253    TokenSupplyDepleted = 1306,
+254    WhitelistedAlready = 1307,
+255}
+256
+257#[cfg(test)]
+258mod tests {
+259    use super::*;
+260    use crate::test_context::{generate_token_id, TestContext, INIT_TIME, TOKEN_EXPIRATION};
+261
+262    #[test]
+263    fn test_supply_depletion() {
+264        // Given a token with max supply of 10
+265        let max_supply = 10u64;
+266        let mut ctx = TestContext::install_raw_with_supply(max_supply);
+267        ctx.whitelist_admin_in_name_token();
+268        let token_hash = "token_hash";
+269
+270        for i in 0..max_supply {
+271            // When minting a token
+272            ctx.token.mint(ctx.alice, i.into(), vec![]);
+273        }
+274        // When trying to mint a new token
+275        let result = ctx.token.try_mint(ctx.alice, max_supply.into(), vec![]);
+276        // Then it should fail with TokenSupplyDepleted error
+277        assert_eq!(
+278            result.unwrap_err(),
+279            NameTokenError::TokenSupplyDepleted.into()
+280        );
+281    }
+282
+283    #[test]
+284    fn test_token_exists() {
+285        let mut ctx = TestContext::install_raw();
+286        ctx.whitelist_admin_in_name_token();
+287        let token_hash = "token_hash";
+288        let token_id = generate_token_id(token_hash);
+289        // Token should not exist
+290        assert_eq!(ctx.token.token_exists(token_id), false);
+291
+292        // Mint a token
+293        let token_owner = ctx.alice;
+294        mint_for(&mut ctx, token_owner, token_hash);
+295        // Then the token should exist
+296        assert_eq!(ctx.token.token_exists(token_id), true);
+297
+298        // Burn the token
+299        whitelist_accounts(&mut ctx, vec![token_owner]);
+300        ctx.set_caller(token_owner);
+301        assert!(try_burn(&mut ctx, token_hash).is_ok());
+302        // Then the token should not exist anymore
+303        assert_eq!(ctx.token.token_exists(token_id), false);
+304    }
+305
+306    #[test]
+307    fn owner_cannot_burn_until_whitelisted() {
+308        let mut ctx = TestContext::install_raw();
+309        ctx.whitelist_admin_in_name_token();
+310        // Given a token owned by alice
+311        let token_hash = "token_hash";
+312        let token_id = generate_token_id(token_hash);
+313        let token_owner = ctx.alice;
+314        mint_for(&mut ctx, token_owner, token_hash);
+315
+316        // Then burning token by the owner fails
+317        ctx.set_caller(token_owner);
+318        let result = try_burn(&mut ctx, token_hash);
+319        assert_eq!(result.err(), Some(NameTokenError::NotWhitelisted.into()));
+320
+321        // When whitelist the token owner
+322        whitelist_accounts(&mut ctx, vec![token_owner]);
+323        // Then the token owner should be able to burn the token
+324        ctx.set_caller(token_owner);
+325        let result = try_burn(&mut ctx, token_hash);
+326        assert!(result.is_ok());
+327    }
+328
+329    #[test]
+330    fn anyone_whitelisted_can_burn() {
+331        let mut ctx = TestContext::install_raw();
+332        ctx.whitelist_admin_in_name_token();
+333        let (token_owner, anyone) = (ctx.alice, ctx.anyone);
+334        // Given a token owned by the token owner
+335        let token_hash = "token_hash";
+336        mint_for(&mut ctx, token_owner, token_hash);
+337
+338        // Then anyone should not be able to burn the token
+339        ctx.set_caller(anyone);
+340        let result = try_burn(&mut ctx, token_hash);
+341        assert_eq!(result.err(), Some(NameTokenError::NotWhitelisted.into()));
+342
+343        // When whitelist the anyone account
+344        whitelist_accounts(&mut ctx, vec![anyone]);
+345        // Then the anyone account should be able to burn the token
+346        ctx.set_caller(anyone);
+347        let result = try_burn(&mut ctx, token_hash);
+348        assert!(result.is_ok());
+349    }
+350
+351    #[test]
+352    fn burning_burnt_token_should_fail() {
+353        let mut ctx = TestContext::install_raw();
+354        ctx.whitelist_admin_in_name_token();
+355        // Given a token owned by alice
+356        let alice = ctx.alice;
+357        let token_hash = "token hash";
+358        let token_id = generate_token_id(token_hash);
+359        mint_for(&mut ctx, alice, token_hash);
+360        // When whitelist the token owner
+361        whitelist_accounts(&mut ctx, vec![alice]);
+362        assert!(ctx.token.token_exists(token_id));
+363        ctx.set_caller(alice);
+364        // Then the token owner should be able to burn the token
+365        assert!(try_burn(&mut ctx, token_hash).is_ok());
+366        // Then burning the token again should fail
+367        assert!(try_burn(&mut ctx, token_hash).is_err());
+368    }
+369
+370    #[test]
+371    fn burning_non_existent_token_should_fail() {
+372        let mut ctx = TestContext::install_raw();
+373        let alice = ctx.alice;
+374        // Given a non existent token
+375        let token_hash = "token hash";
+376        let token_id = generate_token_id(token_hash);
+377        assert!(!ctx.token.token_exists(token_id));
+378
+379        // Then burning the token should fail
+380        whitelist_accounts(&mut ctx, vec![alice]);
+381        ctx.set_caller(alice);
+382        assert!(try_burn(&mut ctx, token_hash).is_err());
+383    }
+384
+385    #[test]
+386    fn admin_transfer_of_multiple_tokens_should_work() {
+387        let mut ctx = TestContext::install_raw();
+388        ctx.whitelist_admin_in_name_token();
+389        let (alice, bob) = (ctx.alice, ctx.bob);
+390        // Given two tokens owned by alice
+391        let token_hashes = vec!["token_hash1".to_string(), "token_hash2".to_string()];
+392        let token_ids = token_hashes
+393            .iter()
+394            .map(|token_hash| generate_token_id(token_hash))
+395            .collect::<Vec<_>>();
+396        mint_for(&mut ctx, alice, &token_hashes[0]);
+397        mint_for(&mut ctx, alice, &token_hashes[1]);
+398
+399        // When admin transfer the tokens to bob
+400        whitelist_accounts(&mut ctx, vec![alice]);
+401        ctx.set_caller(alice);
+402        ctx.token.admin_transfer(bob, token_ids.clone());
+403        // Then bob should be the owner of the tokens
+404        assert!(ctx.token.try_assert_is_owner(token_ids[0], bob).is_ok());
+405        assert!(ctx.token.try_assert_is_owner(token_ids[1], bob).is_ok());
+406    }
+407
+408    #[test]
+409    fn admin_transfer_of_multiple_tokens_should_not_work_for_non_whitelisted_account() {
+410        let mut ctx = TestContext::install_raw();
+411        ctx.whitelist_admin_in_name_token();
+412        let (alice, bob) = (ctx.alice, ctx.bob);
+413        // Given two tokens owned by alice
+414        let token_hashes = vec!["token_hash1".to_string(), "token_hash2".to_string()];
+415        let token_ids = token_hashes
+416            .iter()
+417            .map(|token_hash| generate_token_id(token_hash))
+418            .collect::<Vec<_>>();
+419        mint_for(&mut ctx, alice, &token_hashes[0]);
+420        mint_for(&mut ctx, alice, &token_hashes[1]);
+421
+422        // When non whitelisted account tries to transfer the tokens
+423        ctx.set_caller(alice);
+424        assert_eq!(
+425            ctx.token.try_admin_transfer(bob, token_ids.clone()),
+426            Err(NameTokenError::NotWhitelisted.into())
+427        );
+428
+429        // Then bob should not be the owner of the tokens
+430        assert!(ctx.token.try_assert_is_owner(token_ids[0], bob).is_err());
+431        assert!(ctx.token.try_assert_is_owner(token_ids[1], bob).is_err());
+432    }
+433
+434    #[test]
+435    fn admin_transfer_of_non_existent_token_should_fail() {
+436        let mut ctx = TestContext::install_raw();
+437        ctx.whitelist_admin_in_name_token();
+438        let (alice, bob) = (ctx.alice, ctx.bob);
+439        // Given two tokens owned by alice
+440        let token_hashes = vec![
+441            "token_hash1".to_string(),
+442            "token_hash2".to_string(),
+443            "token_hash3".to_string(),
+444        ];
+445        let token_ids = token_hashes
+446            .iter()
+447            .map(|token_hash| generate_token_id(token_hash))
+448            .collect::<Vec<_>>();
+449        mint_for(&mut ctx, alice, &token_hashes[0]);
+450        mint_for(&mut ctx, alice, &token_hashes[1]);
+451
+452        // When admin transfer the tokens to bob
+453        whitelist_accounts(&mut ctx, vec![alice]);
+454        ctx.set_caller(alice);
+455        // Then the transfer fails
+456        assert!(ctx
+457            .token
+458            .try_admin_transfer(bob, token_ids.clone())
+459            .is_err());
+460        // Then the existing tokens should not be transferred
+461        assert!(ctx.token.try_assert_is_owner(token_ids[0], bob).is_err());
+462        assert!(ctx.token.try_assert_is_owner(token_ids[1], bob).is_err());
+463    }
+464
+465    #[test]
+466    fn only_owner_can_set_resolver() {
+467        let mut ctx = TestContext::install_raw();
+468        ctx.whitelist_admin_in_name_token();
+469        let (alice, bob) = (ctx.alice, ctx.bob);
+470        // Given a token owned by alice
+471        let token_hash = "token_hash";
+472        let token_id = generate_token_id(token_hash);
+473        mint_for(&mut ctx, alice, token_hash);
+474        // Then the token has no resolver
+475        assert_eq!(ctx.token.resolver(token_id), None);
+476
+477        // When bob tries to set the resolver
+478        let resolver = bob;
+479        ctx.set_caller(bob);
+480        // Then the operation should fail
+481        assert_eq!(
+482            ctx.token.try_set_resolver(token_id, resolver),
+483            Err(NameTokenError::InvalidTokenOwner.into())
+484        );
+485        // When alice sets the resolver
+486        ctx.set_caller(alice);
+487        ctx.token.set_resolver(token_id, resolver);
+488        // Then the resolver should be set
+489        assert_eq!(ctx.token.resolver(token_id), Some(resolver));
+490    }
+491
+492    #[test]
+493    fn test_is_token_valid() {
+494        let mut ctx = TestContext::install_raw();
+495        ctx.whitelist_admin_in_name_token();
+496        let alice = ctx.alice;
+497
+498        // Given a token with expiration time in furure
+499        let token_hash = "token_hash";
+500        let token_id = generate_token_id(token_hash);
+501        let expiration = INIT_TIME + 100;
+502        let asset_uri = "https://example.com/asset";
+503        ctx.set_caller(ctx.admin);
+504        let token_meta_data =
+505            NameTokenMetadata::with_no_resolver(token_hash, expiration, asset_uri);
+506        ctx.token.mint(alice, token_id, token_meta_data.to_vec());
+507        // Then the token should be valid
+508        assert!(ctx.token.is_token_valid(token_id));
+509        // When the expiration time is passed
+510        ctx.advance_block_time(expiration + 1);
+511        // Then the token should not be valid
+512        assert!(!ctx.token.is_token_valid(token_id));
+513    }
+514
+515    #[test]
+516    fn burnt_token_is_invalid() {
+517        let mut ctx = TestContext::install_raw();
+518        ctx.whitelist_admin_in_name_token();
+519        let alice = ctx.alice;
+520
+521        // Given a token with expiration time in furure
+522        let name = "token hash";
+523        let token_id = generate_token_id(name);
+524        let expiration = INIT_TIME + 100;
+525        let asset_uri = "https://example.com/asset";
+526        ctx.set_caller(ctx.admin);
+527        let token_meta_data = NameTokenMetadata::with_no_resolver(name, expiration, asset_uri);
+528        ctx.token.mint(alice, token_id, token_meta_data.to_vec());
+529        // Then the token should be valid
+530        assert!(ctx.token.is_token_valid(token_id));
+531
+532        // When the token is burnt
+533        whitelist_accounts(&mut ctx, vec![alice]);
+534        ctx.set_caller(alice);
+535        assert!(try_burn(&mut ctx, name).is_ok());
+536        // Then the token should not be valid
+537        assert!(!ctx.token.is_token_valid(token_id));
+538    }
+539
+540    #[test]
+541    fn only_whitelisted_user_can_set_default_resolver() {
+542        let mut ctx = TestContext::install_raw();
+543
+544        let resolver =
+545            Address::new("hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a")
+546                .unwrap();
+547        assert!(ctx.token.try_set_default_resolver(resolver).is_err());
+548
+549        ctx.whitelist_admin_in_name_token();
+550        assert!(ctx.token.try_set_default_resolver(resolver).is_ok());
+551
+552        assert_eq!(ctx.token.get_default_resolver(), resolver);
+553    }
+554
+555    #[test]
+556    fn transfer_from_operator_resets_resolver() {
+557        let mut ctx = TestContext::install_and_setup();
+558        let (alice, bob, anyone) = (ctx.alice, ctx.bob, ctx.anyone);
+559        let token_label = "token-label";
+560        let full_domain = format!("{}.cspr", token_label);
+561
+562        // Given Alice has a token.
+563        mint_for(&mut ctx, alice, token_label);
+564
+565        // Alice sets the resolver.
+566        ctx.set_caller(alice);
+567        ctx.default_resolver
+568            .set_resolution(full_domain.clone(), Some(anyone));
+569
+570        // Then the resolver points at some address.
+571        assert_eq!(
+572            ctx.default_resolver.resolve(full_domain.clone()),
+573            Some(anyone)
+574        );
+575
+576        // Given Alice sets Bob as an operator.
+577        ctx.token.approve_for_all(bob);
+578
+579        // Then Bob is an operator for Alice.
+580        assert!(ctx.token.is_approved_for_all(alice, bob));
+581
+582        // When Bob transfers the token to himself.
+583        let token_id = generate_token_id(token_label);
+584        ctx.set_caller(bob);
+585        ctx.token.transfer_from(alice, bob, token_id);
+586        assert!(ctx.token.try_assert_is_owner(token_id, bob).is_ok());
+587
+588        // Then the resolver is reset.
+589        assert_eq!(
+590            ctx.default_resolver.resolve(full_domain),
+591            None,
+592            "Resolver should be reset after transfer from operator"
+593        );
+594    }
+595
+596    #[test]
+597    fn test_revoke_whitelist() {
+598        let mut ctx = TestContext::install_raw();
+599        ctx.whitelist_admin_in_name_token();
+600        let alice = ctx.alice;
+601
+602        // Given Alice is whitelisted
+603        whitelist_accounts(&mut ctx, vec![alice]);
+604
+605        // When admin revokes Alice's whitelist
+606        ctx.set_caller(ctx.admin);
+607        let result = ctx.token.try_revoke_whitelist(alice);
+608        // Then it should succeed
+609        assert!(result.is_ok());
+610
+611        // When admin tries to revoke Alice's whitelist again
+612        let result = ctx.token.try_revoke_whitelist(alice);
+613        // Then it should fail with NotWhitelisted error
+614        assert_eq!(result.err(), Some(NameTokenError::NotWhitelisted.into()));
+615    }
+616
+617    #[test]
+618    fn test_whitelist() {
+619        let mut ctx = TestContext::install_raw();
+620        ctx.whitelist_admin_in_name_token();
+621        let alice = ctx.alice;
+622
+623        // When admin tries to whitelist Alice
+624        ctx.set_caller(ctx.admin);
+625        let result = ctx.token.try_whitelist(alice);
+626        // Then it should succeed
+627        assert!(result.is_ok());
+628
+629        // When admin tries to whitelist Alice again
+630        let result = ctx.token.try_whitelist(alice);
+631        // Then it should fail with WhitelistedAlready error
+632        assert_eq!(
+633            result.err(),
+634            Some(NameTokenError::WhitelistedAlready.into())
+635        );
+636    }
+637
+638    fn mint_for(ctx: &mut TestContext, owner: Address, name: &str) -> U256 {
+639        ctx.set_caller(ctx.admin);
+640        let token_metadata =
+641            NameTokenMetadata::with_no_resolver(name, INIT_TIME + TOKEN_EXPIRATION, "");
+642        let token_id = generate_token_id(name);
+643        ctx.token.mint(owner, token_id, token_metadata.to_vec());
+644        token_id
+645    }
+646
+647    fn whitelist_accounts(ctx: &mut TestContext, accounts: Vec<Address>) {
+648        ctx.set_caller(ctx.admin);
+649        for account in accounts {
+650            ctx.token.whitelist(account);
+651        }
+652    }
+653
+654    fn try_burn(ctx: &mut TestContext, token_hash: &str) -> OdraResult<()> {
+655        let token_id = generate_token_id(token_hash);
+656        ctx.token.try_burn(token_id)
+657    }
+658}
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/registrar.rs.html b/docs/src/casper_name_contracts/contracts/registrar.rs.html index 7a8b3d1..fd8aee3 100644 --- a/docs/src/casper_name_contracts/contracts/registrar.rs.html +++ b/docs/src/casper_name_contracts/contracts/registrar.rs.html @@ -1,1995 +1,997 @@ -registrar.rs - source

casper_name_contracts/contracts/
registrar.rs

-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-699
-700
-701
-702
-703
-704
-705
-706
-707
-708
-709
-710
-711
-712
-713
-714
-715
-716
-717
-718
-719
-720
-721
-722
-723
-724
-725
-726
-727
-728
-729
-730
-731
-732
-733
-734
-735
-736
-737
-738
-739
-740
-741
-742
-743
-744
-745
-746
-747
-748
-749
-750
-751
-752
-753
-754
-755
-756
-757
-758
-759
-760
-761
-762
-763
-764
-765
-766
-767
-768
-769
-770
-771
-772
-773
-774
-775
-776
-777
-778
-779
-780
-781
-782
-783
-784
-785
-786
-787
-788
-789
-790
-791
-792
-793
-794
-795
-796
-797
-798
-799
-800
-801
-802
-803
-804
-805
-806
-807
-808
-809
-810
-811
-812
-813
-814
-815
-816
-817
-818
-819
-820
-821
-822
-823
-824
-825
-826
-827
-828
-829
-830
-831
-832
-833
-834
-835
-836
-837
-838
-839
-840
-841
-842
-843
-844
-845
-846
-847
-848
-849
-850
-851
-852
-853
-854
-855
-856
-857
-858
-859
-860
-861
-862
-863
-864
-865
-866
-867
-868
-869
-870
-871
-872
-873
-874
-875
-876
-877
-878
-879
-880
-881
-882
-883
-884
-885
-886
-887
-888
-889
-890
-891
-892
-893
-894
-895
-896
-897
-898
-899
-900
-901
-902
-903
-904
-905
-906
-907
-908
-909
-910
-911
-912
-913
-914
-915
-916
-917
-918
-919
-920
-921
-922
-923
-924
-925
-926
-927
-928
-929
-930
-931
-932
-933
-934
-935
-936
-937
-938
-939
-940
-941
-942
-943
-944
-945
-946
-947
-948
-949
-950
-951
-952
-953
-954
-955
-956
-957
-958
-959
-960
-961
-962
-963
-964
-965
-966
-967
-968
-969
-970
-971
-972
-973
-974
-975
-976
-977
-978
-979
-980
-981
-982
-983
-984
-985
-986
-987
-988
-989
-990
-991
-992
-993
-994
-995
-996
-997
use core::ops::DerefMut;
-use odra::casper_types::U256;
-use odra::module::Revertible;
-use odra::prelude::*;
-use odra::ContractRef;
-use odra_modules::access::{AccessControl, Role, DEFAULT_ADMIN_ROLE};
-use odra_modules::security::Pauseable;
-
-use crate::{
-    contracts::{name_token::NameTokenContractRef, token_id::ToTokenId},
-    data_structures::{
-        ExpirableVoucher, NameMintInfo, NameTokenMetadata, RenewalVoucher, TokenRenewalInfo,
-        TokenizationVoucher,
-    },
-};
-
-use super::resolver::ResolverContractRef;
-use super::utils;
-
-pub const CONTROLLER_ROLE: Role = [2u8; 32];
-// Reminting should be possible after 5 days.
-const PENDING_DELETE_PERIOD: u64 = 5 * 24 * 60 * 60 * 1000; // 5 days
-const MAX_GRACE_PERIOD: u64 = 365 * 24 * 60 * 60 * 1000; // 365 days
-
-/// Event emitted when the grace period is changed.
-#[odra::event]
-pub struct GracePeriodChanged {
-    new_grace_period: u64,
-}
-
-/// Registrar smart contract. It handles the registration and expiration of name tokens.
-#[odra::module(errors = RegistrarError, events = [GracePeriodChanged])]
-pub struct Registrar {
-    name_token: External<NameTokenContractRef>,
-    access_control: SubModule<AccessControl>,
-    grace_period: Var<u64>,
-    pauseable: SubModule<Pauseable>,
-}
-
-#[odra::module]
-impl Registrar {
-    delegate! {
-        to self.access_control {
-            fn has_role(&self, role: &Role, address: &Address) -> bool;
-            fn grant_role(&mut self, role: &Role, address: &Address);
-            fn revoke_role(&mut self, role: &Role, address: &Address);
-        }
-
-        to self.pauseable {
-            fn is_paused(&self) -> bool;
-        }
-    }
-
-    /// Initializes the registrar with the name token contract address.
-    pub fn init(&mut self, name_token: Address) {
-        if !name_token.is_contract() {
-            self.revert(RegistrarError::NameTokenIsNotValid);
-        }
-        let caller = self.env().caller();
-
-        // Set NameToken address.
-        self.name_token.set(name_token);
-
-        // Init grace period to 0.
-        self.grace_period.set(0);
-
-        // Setup roles.
-        self.access_control
-            .unchecked_grant_role(&DEFAULT_ADMIN_ROLE, &caller);
-        self.access_control
-            .unchecked_grant_role(&CONTROLLER_ROLE, &caller);
-    }
-
-    /// Temporarily stops the contract.
-    pub fn pause(&mut self) {
-        self.assert_caller_is_admin();
-        self.pauseable.pause();
-    }
-
-    /// Returns to normal operation.
-    pub fn unpause(&mut self) {
-        self.assert_caller_is_admin();
-        self.pauseable.unpause();
-    }
-
-    /// Returns the grace period.
-    pub fn grace_period(&self) -> u64 {
-        self.grace_period.get().unwrap_or_revert(self)
-    }
-
-    /// Try to resolve a full domain name to an address.
-    pub fn resolve(&self, full_domain: String) -> Option<Address> {
-        let token_name = utils::extract_token_name(&full_domain)?;
-        let token_hash = self.token_id(token_name);
-        if !self.name_token.is_token_valid(token_hash) {
-            return None;
-        }
-
-        match self.name_token.resolver(token_hash) {
-            Some(address) => self.resolver(address).resolve(full_domain),
-            None => None,
-        }
-    }
-
-    // Public functions.
-
-    /// Expire a list of tokens if they are expired.
-    pub fn expire(&mut self, token_ids: Vec<U256>) {
-        self.pauseable.require_not_paused();
-        let block_time = self.env().get_block_time();
-        let grace_period = self.grace_period();
-        for token_id in token_ids {
-            self.expire_single(token_id, block_time, grace_period);
-        }
-    }
-
-    /// Admin only. Sets the grace period.
-    pub fn set_grace_period(&mut self, period: u64) {
-        self.assert_caller_is_admin();
-        if period > MAX_GRACE_PERIOD {
-            self.revert(RegistrarError::GracePeriodTooLong);
-        }
-        self.grace_period.set(period);
-        self.env().emit_event(GracePeriodChanged {
-            new_grace_period: period,
-        });
-    }
-
-    /// Admin only. Transfer ownership of a list of tokens.
-    pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>) {
-        self.assert_caller_is_admin();
-        self.name_token.admin_transfer(new_owner, token_ids);
-    }
-
-    /// Admin only. Burn a list of tokens.
-    pub fn admin_burn(&mut self, token_ids: Vec<U256>) {
-        self.assert_caller_is_admin();
-        let name_token = self.name_token.deref_mut();
-        for id in token_ids {
-            name_token.burn(id);
-        }
-    }
-
-    /// Admin only. Prolong the expiration date of a list of tokens.
-    pub fn admin_prolong(&mut self, tokens: Vec<TokenRenewalInfo>) {
-        self.assert_caller_is_admin();
-        self.prolong(tokens);
-    }
-
-    /// Admin only. Register a list of tokens.
-    pub fn admin_register(&mut self, names: Vec<NameMintInfo>) {
-        self.assert_caller_is_admin();
-        self.register(names);
-    }
-
-    /// Admin only. Prolong the expiration date of a list of tokens and register a list of tokens.
-    pub fn admin_prolong_and_register(
-        &mut self,
-        renewal_tokens: Vec<TokenRenewalInfo>,
-        new_tokens: Vec<NameMintInfo>,
-    ) {
-        self.assert_caller_is_admin();
-        self.prolong(renewal_tokens);
-        self.register(new_tokens);
-    }
-
-    /// Controller only. Prolong the expiration date of a list of tokens.
-    pub fn controller_prolong(&mut self, voucher: RenewalVoucher) {
-        self.pauseable.require_not_paused();
-        self.assert_caller_is_controller();
-        self.assert_voucher_not_expired(&voucher);
-        self.prolong(voucher.tokens);
-    }
-
-    /// Controller only. Register a list of tokens.
-    pub fn controller_register(&mut self, voucher: TokenizationVoucher) {
-        self.pauseable.require_not_paused();
-        self.assert_voucher_not_expired(&voucher);
-        self.assert_caller_is_controller();
-        self.register(voucher.names);
-    }
-
-    /// Controller only. Prolong the expiration date of a list of tokens and register a list of tokens.
-    pub fn controller_prolong_and_register(
-        &mut self,
-        renewal_voucher: RenewalVoucher,
-        tokenization_voucher: TokenizationVoucher,
-    ) {
-        self.pauseable.require_not_paused();
-        self.assert_caller_is_controller();
-        self.assert_voucher_not_expired(&renewal_voucher);
-        self.assert_voucher_not_expired(&tokenization_voucher);
-        self.prolong(renewal_voucher.tokens);
-        self.register(tokenization_voucher.names);
-    }
-}
-
-impl Registrar {
-    fn assert_caller_is_controller(&self) {
-        self.access_control
-            .check_role(&CONTROLLER_ROLE, &self.env().caller());
-    }
-
-    fn assert_caller_is_admin(&self) {
-        self.access_control
-            .check_role(&DEFAULT_ADMIN_ROLE, &self.env().caller());
-    }
-
-    fn assert_in_renewal_period(&mut self, expiration: u64) {
-        let grace_period = self.grace_period();
-        let block_time = self.env().get_block_time();
-        if block_time > expiration + grace_period {
-            self.revert(RegistrarError::GracePeriodExpired);
-        }
-    }
-
-    fn assert_token_expires_in_future(&self, token_expiration: u64, block_time: u64) {
-        if token_expiration < block_time {
-            self.revert(RegistrarError::ExpirationDateInThePast);
-        }
-    }
-
-    fn expire_single(&mut self, token_id: U256, block_time: u64, grace_period: u64) {
-        let metadata = self.wrapped_metadata(token_id);
-        let token_expiration = metadata.expiration();
-        if self.is_token_expired(token_expiration, grace_period, block_time) {
-            self.name_token.burn(token_id);
-        }
-    }
-
-    #[inline]
-    fn assert_token_expired(&self, token_expiration: u64, block_time: u64) {
-        let grace_period = self.grace_period();
-        if !self.is_token_expired(token_expiration, grace_period, block_time) {
-            self.revert(RegistrarError::TokenNotExpired);
-        }
-    }
-
-    #[inline]
-    fn assert_voucher_not_expired<T: ExpirableVoucher>(&self, voucher: &T) {
-        let block_time = self.env().get_block_time();
-        if voucher.expiration_time() < block_time {
-            self.revert(RegistrarError::VoucherExpired);
-        }
-    }
-
-    #[inline]
-    fn resolver(&self, address: Address) -> ResolverContractRef {
-        ResolverContractRef::new(self.env(), address)
-    }
-
-    #[inline]
-    fn wrapped_metadata(&self, token_id: U256) -> NameTokenMetadata {
-        self.name_token
-            .token_metadata(token_id)
-            .try_into()
-            .unwrap_or_revert(self)
-    }
-
-    #[inline]
-    fn is_token_expired(&self, token_expiration: u64, grace_period: u64, block_time: u64) -> bool {
-        block_time > token_expiration + grace_period + PENDING_DELETE_PERIOD
-    }
-
-    fn prolong(&mut self, tokens: Vec<TokenRenewalInfo>) {
-        let block_time = self.env().get_block_time();
-        for token in tokens {
-            // verify the new expiration date is in the future
-            self.assert_token_expires_in_future(token.token_expiration, block_time);
-            // Compute token hash.
-            let token_id = token.token_id;
-            // get the token metadata
-            let mut metadata = self.wrapped_metadata(token_id);
-            // check if the time for the renewal does not elapsed
-            let expiration = metadata.expiration();
-            self.assert_in_renewal_period(expiration);
-            metadata.set_expiration(token.token_expiration);
-
-            self.name_token
-                .set_token_metadata(token_id, metadata.to_vec());
-        }
-    }
-
-    fn register(&mut self, names: Vec<NameMintInfo>) {
-        let block_time = self.env().get_block_time();
-        for info in names {
-            self.assert_token_expires_in_future(info.token_expiration, block_time);
-            if !utils::is_label_valid(&info.label) {
-                self.revert(RegistrarError::TokenNameIsNotValid);
-            }
-            let metadata = NameTokenMetadata::with_resolver(
-                &info.label,
-                info.token_expiration,
-                &info.asset_uri,
-                self.name_token.get_default_resolver(),
-            );
-            // Compute token hash.
-            let token_id = self.token_id(info.label);
-
-            // Check if token already exists.
-            let token_exists = self.name_token.token_exists(token_id);
-
-            // If token exists and is expired and grace period is over, burn it.
-            if token_exists {
-                let metadata = self.wrapped_metadata(token_id);
-                self.assert_token_expired(metadata.expiration(), block_time);
-                self.name_token.burn(token_id);
-            }
-
-            // Mint token.
-            self.name_token
-                .mint(info.owner, token_id, metadata.to_vec());
-        }
-    }
-}
-
-#[odra::odra_error]
-pub enum RegistrarError {
-    ExpirationDateInThePast = 1201,
-    TokenNotExpired = 1202,
-    GracePeriodExpired = 1203,
-    VoucherExpired = 1204,
-    TokenDoesNotExist = 1205,
-    GracePeriodTooLong = 1206,
-    NameTokenIsNotValid = 1207,
-    TokenNameIsNotValid = 1208,
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use crate::{
-        data_structures::TokenRenewalInfo,
-        test_context::{
-            generate_token_id, TestContext, GRACE_PERIOD, INIT_TIME, TOKEN_EXPIRATION, TOKEN_NAME,
-        },
-    };
-    use odra::{
-        casper_event_standard::EventInstance,
-        host::{Deployer, HostRef},
-    };
-    use odra_modules::{access::errors::Error as AccessControlError, cep95::Burn};
-
-    #[test]
-    fn deploy_fails_if_account_set_as_name_token() {
-        let env = odra_test::env();
-        let result = Registrar::try_deploy(
-            &env,
-            RegistrarInitArgs {
-                name_token: env.get_account(1),
-            },
-        );
-        assert!(result.is_err());
-    }
-
-    #[test]
-    fn test_admin_can_manage_controller_role() {
-        let mut ctx = TestContext::install_raw();
-        let (env, reg) = (ctx.env, &mut ctx.registrar);
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Alice has no role.
-        assert!(!reg.has_role(&CONTROLLER_ROLE, &alice));
-
-        // Alice can't grant roles.
-        env.set_caller(alice);
-        let result = reg.try_grant_role(&CONTROLLER_ROLE, &alice);
-        assert_eq!(result.unwrap_err(), AccessControlError::MissingRole.into());
-
-        // Admin can grant roles.
-        env.set_caller(admin);
-        reg.grant_role(&CONTROLLER_ROLE, &alice);
-        assert!(reg.has_role(&CONTROLLER_ROLE, &alice));
-
-        // Alice can't revoke roles.
-        env.set_caller(alice);
-        let result = reg.try_revoke_role(&CONTROLLER_ROLE, &alice);
-        assert_eq!(result.unwrap_err(), AccessControlError::MissingRole.into());
-
-        // Admin can revoke roles.
-        env.set_caller(admin);
-        reg.revoke_role(&CONTROLLER_ROLE, &alice);
-        assert!(!reg.has_role(&CONTROLLER_ROLE, &alice));
-    }
-
-    #[test]
-    fn test_admin_can_manage_grace_period() {
-        let mut ctx = TestContext::install_raw();
-        let (env, reg) = (ctx.env, &mut ctx.registrar);
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Given the initial grace period is 0.
-        assert_eq!(reg.grace_period(), 0);
-
-        // When Admin sets grace period.
-        env.set_caller(admin);
-        reg.set_grace_period(100);
-
-        // Then grace period is changed.
-        assert_eq!(reg.grace_period(), 100);
-
-        // When Alice tries to set grace period.
-        env.set_caller(alice);
-        let result = reg.try_set_grace_period(200);
-        assert_eq!(result, Err(AccessControlError::MissingRole.into()));
-
-        // Then grace period is not changed.
-        assert_eq!(reg.grace_period(), 100);
-    }
-
-    #[test]
-    fn test_grace_period_too_long() {
-        let mut ctx = TestContext::install_raw();
-        let (env, reg) = (ctx.env, &mut ctx.registrar);
-        let admin = ctx.admin;
-
-        // When Admin sets too long grace period.
-        env.set_caller(admin);
-        let result = reg.try_set_grace_period(MAX_GRACE_PERIOD + 1);
-
-        // Then it fails with error.
-        assert_eq!(result, Err(RegistrarError::GracePeriodTooLong.into()));
-    }
-
-    #[test]
-    fn test_set_grace_period_emits_event() {
-        let mut ctx = TestContext::install_raw();
-        let (env, reg) = (ctx.env, &mut ctx.registrar);
-        let admin = ctx.admin;
-
-        // When Admin sets grace period.
-        env.set_caller(admin);
-        reg.set_grace_period(MAX_GRACE_PERIOD);
-
-        // Then the contract emits GracePeriodChanged event.
-        assert!(env.emitted(reg, GracePeriodChanged::name()));
-    }
-
-    #[test]
-    fn register_with_past_expiration_time_fails() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // When Admin try to register with expiration time in past.
-        let token_expiration = INIT_TIME - 1;
-        let voucher_expiration = ctx.voucher_expiration_time();
-        let result = ctx.try_name_register(
-            admin,
-            alice,
-            TOKEN_NAME,
-            token_expiration,
-            voucher_expiration,
-        );
-
-        // Then registration fails.
-        assert_eq!(result, Err(RegistrarError::ExpirationDateInThePast.into()));
-    }
-
-    #[test]
-    fn register_with_expired_voucher_fails() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // When Admin try to register with expiration time in past.
-        let token_expiration = ctx.token_expiration_time();
-        let voucher_expiration = INIT_TIME - 1;
-        let result = ctx.try_name_register(
-            admin,
-            alice,
-            TOKEN_NAME,
-            token_expiration,
-            voucher_expiration,
-        );
-
-        // Then registration fails.
-        assert_eq!(result, Err(RegistrarError::VoucherExpired.into()));
-    }
-
-    #[test]
-    fn register_invalid_label_fails() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-        let invalid_name = "invalid-label-";
-
-        // When Admin tries to register an invalid label.
-        let result = ctx.try_name_register(
-            admin,
-            alice,
-            invalid_name,
-            ctx.token_expiration_time(),
-            ctx.voucher_expiration_time(),
-        );
-
-        // Then registration fails.
-        assert_eq!(
-            result.unwrap_err(),
-            OdraError::from(RegistrarError::TokenNameIsNotValid)
-        );
-    }
-
-    #[test]
-    fn test_register_successful_mint() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // When Admin try to register with expiration time in future.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        // Then token is minted.
-        ctx.expect_name_is_registered(alice, TOKEN_NAME);
-    }
-
-    #[test]
-    fn register_the_same_name_before_expiration() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        // And token not expired.
-        ctx.advance_block_time(TOKEN_EXPIRATION / 2);
-
-        // When Admin tries to register the same token again.
-        let result = ctx.try_name_register(
-            admin,
-            alice,
-            TOKEN_NAME,
-            ctx.token_expiration_time(),
-            ctx.voucher_expiration_time(),
-        );
-
-        // Then registration fails.
-        assert_eq!(result, Err(RegistrarError::TokenNotExpired.into()));
-    }
-
-    #[test]
-    fn register_the_same_name_before_grace_period() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        // And token expired, but within grace period.
-        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + PENDING_DELETE_PERIOD - 1);
-
-        // When Admin tries to register the same token again.
-        let result = ctx.try_name_register(
-            admin,
-            alice,
-            TOKEN_NAME,
-            ctx.token_expiration_time(),
-            ctx.voucher_expiration_time(),
-        );
-
-        // Then registration fails.
-        assert_eq!(result, Err(RegistrarError::TokenNotExpired.into()));
-    }
-
-    #[test]
-    fn register_the_same_name_after_grace_period() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        // And token expired, and grace period is over.
-        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + PENDING_DELETE_PERIOD + 1);
-
-        // When Admin tries to register the same token again.
-        ctx.with_name_registered(admin, bob, TOKEN_NAME);
-
-        // Then Alice's token is burned.
-        let event: Burn = ctx.token.get_event(-4).unwrap();
-        let expected = Burn {
-            from: alice,
-            token_id: generate_token_id(TOKEN_NAME),
-        };
-        assert_eq!(event, expected);
-
-        // And Bob's token is minted.
-        ctx.expect_name_is_registered(bob, TOKEN_NAME);
-    }
-
-    #[test]
-    fn test_token_expiration_after_grace_period() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        // And is after grace period.
-        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + PENDING_DELETE_PERIOD + 1);
-
-        // When anyone tries to expire the token.
-        ctx.with_name_expired(TOKEN_NAME);
-
-        // Then token is burned.
-        assert_eq!(ctx.token.balance_of(alice), U256::zero());
-    }
-
-    #[test]
-    fn on_expiration_default_resolver_is_invalidated() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        let full_domain = format!("{}.cspr", TOKEN_NAME);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-        // And a resolution for the token is set.
-        ctx.set_caller(alice);
-        ctx.default_resolver
-            .set_resolution(full_domain.clone(), Some(alice));
-        assert_eq!(
-            ctx.default_resolver.resolve(full_domain.clone()),
-            Some(alice)
-        );
-        assert_eq!(
-            ctx.token.resolver(generate_token_id(TOKEN_NAME)),
-            Some(ctx.default_resolver.address())
-        );
-
-        // And is after grace period.
-        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + PENDING_DELETE_PERIOD + 1);
-
-        // When anyone tries to expire the token.
-        ctx.with_name_expired(TOKEN_NAME);
-
-        // Then the resolution is cleared.
-        assert_eq!(ctx.default_resolver.resolve(full_domain), None);
-    }
-
-    #[test]
-    fn test_multi_tokens_expiration_after_grace_period() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-        let tokens = vec!["t1", "t2", "t3", "t4", "t5"];
-
-        // Given Alice has 5 tokens.
-        ctx.with_multi_names_registered(admin, alice, tokens.clone());
-        assert_eq!(ctx.token.balance_of(alice), U256::from(5));
-        // And is after grace period.
-        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + PENDING_DELETE_PERIOD + 1);
-
-        // When anyone tries to expire the tokens.
-        ctx.with_names_expired(tokens);
-
-        // Then all the tokens are burned.
-        assert_eq!(ctx.token.balance_of(alice), U256::from(0));
-    }
-
-    #[test]
-    fn test_admin_transfer() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        ctx.admin_transfer(bob, vec![TOKEN_NAME]);
-
-        // Then Alice's token is transferred to Bob.
-        assert_eq!(ctx.token.balance_of(alice), U256::from(0));
-        assert_eq!(ctx.token.balance_of(bob), U256::from(1));
-    }
-
-    #[test]
-    fn test_admin_transfer_clears_default_resolver() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
-        let full_domain = format!("{}.cspr", TOKEN_NAME);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        // And a resolution for the token is set
-        ctx.set_caller(alice);
-        ctx.default_resolver
-            .set_resolution(full_domain.clone(), Some(alice));
-        assert_eq!(
-            ctx.default_resolver.resolve(full_domain.clone()),
-            Some(alice)
-        );
-        assert_eq!(
-            ctx.token.resolver(generate_token_id(TOKEN_NAME)),
-            Some(ctx.default_resolver.address())
-        );
-
-        ctx.admin_transfer(bob, vec![TOKEN_NAME]);
-
-        // Then the resolution is cleared.
-        assert_eq!(ctx.default_resolver.resolve(full_domain), None);
-    }
-
-    #[test]
-    fn test_admin_transfer_sets_default_resolver() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        // And change the resolver
-        let resolver =
-            Address::new("hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a")
-                .unwrap();
-        ctx.set_caller(alice);
-        ctx.token
-            .set_resolver(generate_token_id(TOKEN_NAME), resolver);
-
-        let json = ctx.token.token_metadata(generate_token_id(TOKEN_NAME));
-        let actual_resolver = NameTokenMetadata::try_from(json)
-            .unwrap()
-            .resolver()
-            .unwrap();
-        assert_eq!(actual_resolver, Some(resolver));
-
-        ctx.admin_transfer(bob, vec![TOKEN_NAME]);
-
-        // Then the resolution is cleared.
-        let json = ctx.token.token_metadata(generate_token_id(TOKEN_NAME));
-        let actual_resolver = NameTokenMetadata::try_from(json)
-            .unwrap()
-            .resolver()
-            .unwrap();
-        assert_eq!(actual_resolver, Some(ctx.token.get_default_resolver()));
-    }
-
-    #[test]
-    fn test_admin_burn() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        ctx.admin_burn(vec![TOKEN_NAME]);
-
-        // Then Alice's token is burned.
-        assert_eq!(ctx.token.balance_of(alice), U256::from(0));
-    }
-
-    #[test]
-    fn test_admin_burn_clears_default_resolver() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-        let full_domain = format!("{}.cspr", TOKEN_NAME);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        // And a resolution for the token is set
-        ctx.set_caller(alice);
-        ctx.default_resolver
-            .set_resolution(full_domain.clone(), Some(alice));
-        assert_eq!(
-            ctx.default_resolver.resolve(full_domain.clone()),
-            Some(alice)
-        );
-        assert_eq!(
-            ctx.token.resolver(generate_token_id(TOKEN_NAME)),
-            Some(ctx.default_resolver.address())
-        );
-
-        ctx.admin_burn(vec![TOKEN_NAME]);
-
-        // Then the resolution is cleared.
-        assert_eq!(ctx.default_resolver.resolve(full_domain), None);
-    }
-
-    #[test]
-    fn renew_with_expired_voucher_fails() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        // When Admin tries to renew the token.
-        ctx.set_caller(admin);
-
-        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
-        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
-        let tokens = vec![TokenRenewalInfo::new(
-            generate_token_id(TOKEN_NAME),
-            token_expiration,
-        )];
-        let voucher = RenewalVoucher::new(tokens, voucher_expiration);
-        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD - 1);
-        let result = ctx.registrar.try_controller_prolong(voucher);
-
-        // Then registration fails.
-        assert_eq!(result, Err(RegistrarError::VoucherExpired.into()));
-    }
-
-    #[test]
-    fn renew_when_paused_fails() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-        ctx.set_caller(admin);
-        ctx.registrar.pause();
-
-        // When Admin tries to renew the token.
-        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
-        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
-        let tokens = vec![TokenRenewalInfo::new(
-            generate_token_id(TOKEN_NAME),
-            token_expiration,
-        )];
-        let voucher = RenewalVoucher::new(tokens, voucher_expiration);
-        let result = ctx.registrar.try_controller_prolong(voucher);
-
-        // Then registration fails.
-        assert_eq!(
-            result,
-            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
-        );
-    }
-
-    #[test]
-    fn test_renew() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD - 1);
-        // When Admin tries to renew the token.
-        let test_token_name = TOKEN_NAME;
-        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
-        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION + GRACE_PERIOD;
-        let tokens = vec![TokenRenewalInfo::new(
-            generate_token_id(test_token_name),
-            token_expiration,
-        )];
-        let voucher = RenewalVoucher::new(tokens, voucher_expiration);
-        ctx.set_caller(admin);
-        ctx.registrar.controller_prolong(voucher);
-
-        // Then token expiration is updated.
-        let metadata = ctx.token.token_metadata(generate_token_id(test_token_name));
-        let expected = NameTokenMetadata::with_resolver(
-            TOKEN_NAME,
-            INIT_TIME + 2 * TOKEN_EXPIRATION,
-            "",
-            ctx.default_resolver.address(),
-        );
-        assert_eq!(metadata, expected.to_vec());
-    }
-
-    #[test]
-    fn test_renew_after_grace_period_fails() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + 1);
-        // When Admin tries to renew the token.
-        let test_token_name = TOKEN_NAME;
-        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
-        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION + GRACE_PERIOD + 1;
-        let tokens = vec![TokenRenewalInfo::new(
-            generate_token_id(test_token_name),
-            token_expiration,
-        )];
-        let voucher = RenewalVoucher::new(tokens, voucher_expiration);
-        ctx.set_caller(admin);
-        let result = ctx.registrar.try_controller_prolong(voucher);
-
-        // Then registration fails.
-        assert_eq!(result, Err(RegistrarError::GracePeriodExpired.into()));
-    }
-
-    #[test]
-    fn resolve_with_invalid_domain() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-        let full_domain = "invalid".to_string();
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-
-        // When anyone tries to resolve an invalid domain.
-        let result = ctx.registrar.resolve(full_domain);
-
-        // Then the result is None.
-        assert_eq!(result, None);
-    }
-
-    #[test]
-    fn resolve_with_invalid_token() {
-        let ctx = TestContext::install_and_setup();
-        let full_domain = "odra.cspr".to_string();
-
-        // When anyone tries to resolve an invalid domain.
-        let result = ctx.registrar.resolve(full_domain);
-
-        // Then the result is None.
-        assert_eq!(result, None);
-    }
-
-    #[test]
-    fn resolve_with_valid_domain() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-        let full_domain = "odra.cspr".to_string();
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, "odra");
-
-        ctx.set_caller(alice);
-        ctx.default_resolver
-            .set_resolution(full_domain.clone(), Some(alice));
-
-        // When anyone tries to resolve a valid domain.
-        let result = ctx.registrar.resolve(full_domain);
-
-        // Then the result is the token owner.
-        assert_eq!(result, Some(alice));
-    }
-
-    #[test]
-    fn test_controller_register_fails_when_paused() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-        ctx.set_caller(admin);
-        ctx.registrar.pause();
-
-        // When Admin tries to register the token.
-        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
-        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
-        let asset_uri = "https://example.com/asset";
-        let names = vec![NameMintInfo::new(
-            TOKEN_NAME,
-            alice,
-            token_expiration,
-            asset_uri,
-        )];
-        let voucher = TokenizationVoucher::new(names, voucher_expiration);
-        let result = ctx.registrar.try_controller_register(voucher);
-
-        // Then registration fails.
-        assert_eq!(
-            result,
-            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
-        );
-    }
-
-    #[test]
-    fn test_controller_register_and_prolong_fails_when_paused() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice) = (ctx.admin, ctx.alice);
-
-        // Given Alice has a token.
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-        ctx.set_caller(admin);
-        ctx.registrar.pause();
-
-        // When Admin tries to register the token.
-        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
-        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
-        let asset_uri = "https://example.com/asset";
-        let names = vec![NameMintInfo::new(
-            TOKEN_NAME,
-            alice,
-            token_expiration,
-            asset_uri,
-        )];
-        let tokens = vec![TokenRenewalInfo::new(
-            generate_token_id(TOKEN_NAME),
-            token_expiration,
-        )];
-        let renewal_voucher = RenewalVoucher::new(tokens, voucher_expiration);
-        let voucher = TokenizationVoucher::new(names, voucher_expiration);
-        let result = ctx
-            .registrar
-            .try_controller_prolong_and_register(renewal_voucher, voucher);
-
-        // Then registration fails.
-        assert_eq!(
-            result,
-            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
-        );
-    }
-}
-
\ No newline at end of file +registrar.rs - source

casper_name_contracts/contracts/
registrar.rs

1use core::ops::DerefMut;
+2use odra::casper_types::U256;
+3use odra::module::Revertible;
+4use odra::prelude::*;
+5use odra::ContractRef;
+6use odra_modules::access::{AccessControl, Role, DEFAULT_ADMIN_ROLE};
+7use odra_modules::security::Pauseable;
+8
+9use crate::{
+10    contracts::{name_token::NameTokenContractRef, token_id::ToTokenId},
+11    data_structures::{
+12        ExpirableVoucher, NameMintInfo, NameTokenMetadata, RenewalVoucher, TokenRenewalInfo,
+13        TokenizationVoucher,
+14    },
+15};
+16
+17use super::resolver::ResolverContractRef;
+18use super::utils;
+19
+20pub const CONTROLLER_ROLE: Role = [2u8; 32];
+21// Reminting should be possible after 5 days.
+22const PENDING_DELETE_PERIOD: u64 = 5 * 24 * 60 * 60 * 1000; // 5 days
+23const MAX_GRACE_PERIOD: u64 = 365 * 24 * 60 * 60 * 1000; // 365 days
+24
+25/// Event emitted when the grace period is changed.
+26#[odra::event]
+27pub struct GracePeriodChanged {
+28    new_grace_period: u64,
+29}
+30
+31/// Registrar smart contract. It handles the registration and expiration of name tokens.
+32#[odra::module(errors = RegistrarError, events = [GracePeriodChanged])]
+33pub struct Registrar {
+34    name_token: External<NameTokenContractRef>,
+35    access_control: SubModule<AccessControl>,
+36    grace_period: Var<u64>,
+37    pauseable: SubModule<Pauseable>,
+38}
+39
+40#[odra::module]
+41impl Registrar {
+42    delegate! {
+43        to self.access_control {
+44            fn has_role(&self, role: &Role, address: &Address) -> bool;
+45            fn grant_role(&mut self, role: &Role, address: &Address);
+46            fn revoke_role(&mut self, role: &Role, address: &Address);
+47        }
+48
+49        to self.pauseable {
+50            fn is_paused(&self) -> bool;
+51        }
+52    }
+53
+54    /// Initializes the registrar with the name token contract address.
+55    pub fn init(&mut self, name_token: Address) {
+56        if !name_token.is_contract() {
+57            self.revert(RegistrarError::NameTokenIsNotValid);
+58        }
+59        let caller = self.env().caller();
+60
+61        // Set NameToken address.
+62        self.name_token.set(name_token);
+63
+64        // Init grace period to 0.
+65        self.grace_period.set(0);
+66
+67        // Setup roles.
+68        self.access_control
+69            .unchecked_grant_role(&DEFAULT_ADMIN_ROLE, &caller);
+70        self.access_control
+71            .unchecked_grant_role(&CONTROLLER_ROLE, &caller);
+72    }
+73
+74    /// Temporarily stops the contract.
+75    pub fn pause(&mut self) {
+76        self.assert_caller_is_admin();
+77        self.pauseable.pause();
+78    }
+79
+80    /// Returns to normal operation.
+81    pub fn unpause(&mut self) {
+82        self.assert_caller_is_admin();
+83        self.pauseable.unpause();
+84    }
+85
+86    /// Returns the grace period.
+87    pub fn grace_period(&self) -> u64 {
+88        self.grace_period.get().unwrap_or_revert(self)
+89    }
+90
+91    /// Try to resolve a full domain name to an address.
+92    pub fn resolve(&self, full_domain: String) -> Option<Address> {
+93        let token_name = utils::extract_token_name(&full_domain)?;
+94        let token_hash = self.token_id(token_name);
+95        if !self.name_token.is_token_valid(token_hash) {
+96            return None;
+97        }
+98
+99        match self.name_token.resolver(token_hash) {
+100            Some(address) => self.resolver(address).resolve(full_domain),
+101            None => None,
+102        }
+103    }
+104
+105    // Public functions.
+106
+107    /// Expire a list of tokens if they are expired.
+108    pub fn expire(&mut self, token_ids: Vec<U256>) {
+109        self.pauseable.require_not_paused();
+110        let block_time = self.env().get_block_time();
+111        let grace_period = self.grace_period();
+112        for token_id in token_ids {
+113            self.expire_single(token_id, block_time, grace_period);
+114        }
+115    }
+116
+117    /// Admin only. Sets the grace period.
+118    pub fn set_grace_period(&mut self, period: u64) {
+119        self.assert_caller_is_admin();
+120        if period > MAX_GRACE_PERIOD {
+121            self.revert(RegistrarError::GracePeriodTooLong);
+122        }
+123        self.grace_period.set(period);
+124        self.env().emit_event(GracePeriodChanged {
+125            new_grace_period: period,
+126        });
+127    }
+128
+129    /// Admin only. Transfer ownership of a list of tokens.
+130    pub fn admin_transfer(&mut self, new_owner: Address, token_ids: Vec<U256>) {
+131        self.assert_caller_is_admin();
+132        self.name_token.admin_transfer(new_owner, token_ids);
+133    }
+134
+135    /// Admin only. Burn a list of tokens.
+136    pub fn admin_burn(&mut self, token_ids: Vec<U256>) {
+137        self.assert_caller_is_admin();
+138        let name_token = self.name_token.deref_mut();
+139        for id in token_ids {
+140            name_token.burn(id);
+141        }
+142    }
+143
+144    /// Admin only. Prolong the expiration date of a list of tokens.
+145    pub fn admin_prolong(&mut self, tokens: Vec<TokenRenewalInfo>) {
+146        self.assert_caller_is_admin();
+147        self.prolong(tokens);
+148    }
+149
+150    /// Admin only. Register a list of tokens.
+151    pub fn admin_register(&mut self, names: Vec<NameMintInfo>) {
+152        self.assert_caller_is_admin();
+153        self.register(names);
+154    }
+155
+156    /// Admin only. Prolong the expiration date of a list of tokens and register a list of tokens.
+157    pub fn admin_prolong_and_register(
+158        &mut self,
+159        renewal_tokens: Vec<TokenRenewalInfo>,
+160        new_tokens: Vec<NameMintInfo>,
+161    ) {
+162        self.assert_caller_is_admin();
+163        self.prolong(renewal_tokens);
+164        self.register(new_tokens);
+165    }
+166
+167    /// Controller only. Prolong the expiration date of a list of tokens.
+168    pub fn controller_prolong(&mut self, voucher: RenewalVoucher) {
+169        self.pauseable.require_not_paused();
+170        self.assert_caller_is_controller();
+171        self.assert_voucher_not_expired(&voucher);
+172        self.prolong(voucher.tokens);
+173    }
+174
+175    /// Controller only. Register a list of tokens.
+176    pub fn controller_register(&mut self, voucher: TokenizationVoucher) {
+177        self.pauseable.require_not_paused();
+178        self.assert_voucher_not_expired(&voucher);
+179        self.assert_caller_is_controller();
+180        self.register(voucher.names);
+181    }
+182
+183    /// Controller only. Prolong the expiration date of a list of tokens and register a list of tokens.
+184    pub fn controller_prolong_and_register(
+185        &mut self,
+186        renewal_voucher: RenewalVoucher,
+187        tokenization_voucher: TokenizationVoucher,
+188    ) {
+189        self.pauseable.require_not_paused();
+190        self.assert_caller_is_controller();
+191        self.assert_voucher_not_expired(&renewal_voucher);
+192        self.assert_voucher_not_expired(&tokenization_voucher);
+193        self.prolong(renewal_voucher.tokens);
+194        self.register(tokenization_voucher.names);
+195    }
+196}
+197
+198impl Registrar {
+199    fn assert_caller_is_controller(&self) {
+200        self.access_control
+201            .check_role(&CONTROLLER_ROLE, &self.env().caller());
+202    }
+203
+204    fn assert_caller_is_admin(&self) {
+205        self.access_control
+206            .check_role(&DEFAULT_ADMIN_ROLE, &self.env().caller());
+207    }
+208
+209    fn assert_in_renewal_period(&mut self, expiration: u64) {
+210        let grace_period = self.grace_period();
+211        let block_time = self.env().get_block_time();
+212        if block_time > expiration + grace_period {
+213            self.revert(RegistrarError::GracePeriodExpired);
+214        }
+215    }
+216
+217    fn assert_token_expires_in_future(&self, token_expiration: u64, block_time: u64) {
+218        if token_expiration < block_time {
+219            self.revert(RegistrarError::ExpirationDateInThePast);
+220        }
+221    }
+222
+223    fn expire_single(&mut self, token_id: U256, block_time: u64, grace_period: u64) {
+224        let metadata = self.wrapped_metadata(token_id);
+225        let token_expiration = metadata.expiration();
+226        if self.is_token_expired(token_expiration, grace_period, block_time) {
+227            self.name_token.burn(token_id);
+228        }
+229    }
+230
+231    #[inline]
+232    fn assert_token_expired(&self, token_expiration: u64, block_time: u64) {
+233        let grace_period = self.grace_period();
+234        if !self.is_token_expired(token_expiration, grace_period, block_time) {
+235            self.revert(RegistrarError::TokenNotExpired);
+236        }
+237    }
+238
+239    #[inline]
+240    fn assert_voucher_not_expired<T: ExpirableVoucher>(&self, voucher: &T) {
+241        let block_time = self.env().get_block_time();
+242        if voucher.expiration_time() < block_time {
+243            self.revert(RegistrarError::VoucherExpired);
+244        }
+245    }
+246
+247    #[inline]
+248    fn resolver(&self, address: Address) -> ResolverContractRef {
+249        ResolverContractRef::new(self.env(), address)
+250    }
+251
+252    #[inline]
+253    fn wrapped_metadata(&self, token_id: U256) -> NameTokenMetadata {
+254        self.name_token
+255            .token_metadata(token_id)
+256            .try_into()
+257            .unwrap_or_revert(self)
+258    }
+259
+260    #[inline]
+261    fn is_token_expired(&self, token_expiration: u64, grace_period: u64, block_time: u64) -> bool {
+262        block_time > token_expiration + grace_period + PENDING_DELETE_PERIOD
+263    }
+264
+265    fn prolong(&mut self, tokens: Vec<TokenRenewalInfo>) {
+266        let block_time = self.env().get_block_time();
+267        for token in tokens {
+268            // verify the new expiration date is in the future
+269            self.assert_token_expires_in_future(token.token_expiration, block_time);
+270            // Compute token hash.
+271            let token_id = token.token_id;
+272            // get the token metadata
+273            let mut metadata = self.wrapped_metadata(token_id);
+274            // check if the time for the renewal does not elapsed
+275            let expiration = metadata.expiration();
+276            self.assert_in_renewal_period(expiration);
+277            metadata.set_expiration(token.token_expiration);
+278
+279            self.name_token
+280                .set_token_metadata(token_id, metadata.to_vec());
+281        }
+282    }
+283
+284    fn register(&mut self, names: Vec<NameMintInfo>) {
+285        let block_time = self.env().get_block_time();
+286        for info in names {
+287            self.assert_token_expires_in_future(info.token_expiration, block_time);
+288            if !utils::is_label_valid(&info.label) {
+289                self.revert(RegistrarError::TokenNameIsNotValid);
+290            }
+291            let metadata = NameTokenMetadata::with_resolver(
+292                &info.label,
+293                info.token_expiration,
+294                &info.asset_uri,
+295                self.name_token.get_default_resolver(),
+296            );
+297            // Compute token hash.
+298            let token_id = self.token_id(info.label);
+299
+300            // Check if token already exists.
+301            let token_exists = self.name_token.token_exists(token_id);
+302
+303            // If token exists and is expired and grace period is over, burn it.
+304            if token_exists {
+305                let metadata = self.wrapped_metadata(token_id);
+306                self.assert_token_expired(metadata.expiration(), block_time);
+307                self.name_token.burn(token_id);
+308            }
+309
+310            // Mint token.
+311            self.name_token
+312                .mint(info.owner, token_id, metadata.to_vec());
+313        }
+314    }
+315}
+316
+317#[odra::odra_error]
+318pub enum RegistrarError {
+319    ExpirationDateInThePast = 1201,
+320    TokenNotExpired = 1202,
+321    GracePeriodExpired = 1203,
+322    VoucherExpired = 1204,
+323    TokenDoesNotExist = 1205,
+324    GracePeriodTooLong = 1206,
+325    NameTokenIsNotValid = 1207,
+326    TokenNameIsNotValid = 1208,
+327}
+328
+329#[cfg(test)]
+330mod tests {
+331    use super::*;
+332    use crate::{
+333        data_structures::TokenRenewalInfo,
+334        test_context::{
+335            generate_token_id, TestContext, GRACE_PERIOD, INIT_TIME, TOKEN_EXPIRATION, TOKEN_NAME,
+336        },
+337    };
+338    use odra::{
+339        casper_event_standard::EventInstance,
+340        host::{Deployer, HostRef},
+341    };
+342    use odra_modules::{access::errors::Error as AccessControlError, cep95::Burn};
+343
+344    #[test]
+345    fn deploy_fails_if_account_set_as_name_token() {
+346        let env = odra_test::env();
+347        let result = Registrar::try_deploy(
+348            &env,
+349            RegistrarInitArgs {
+350                name_token: env.get_account(1),
+351            },
+352        );
+353        assert!(result.is_err());
+354    }
+355
+356    #[test]
+357    fn test_admin_can_manage_controller_role() {
+358        let mut ctx = TestContext::install_raw();
+359        let (env, reg) = (ctx.env, &mut ctx.registrar);
+360        let (admin, alice) = (ctx.admin, ctx.alice);
+361
+362        // Alice has no role.
+363        assert!(!reg.has_role(&CONTROLLER_ROLE, &alice));
+364
+365        // Alice can't grant roles.
+366        env.set_caller(alice);
+367        let result = reg.try_grant_role(&CONTROLLER_ROLE, &alice);
+368        assert_eq!(result.unwrap_err(), AccessControlError::MissingRole.into());
+369
+370        // Admin can grant roles.
+371        env.set_caller(admin);
+372        reg.grant_role(&CONTROLLER_ROLE, &alice);
+373        assert!(reg.has_role(&CONTROLLER_ROLE, &alice));
+374
+375        // Alice can't revoke roles.
+376        env.set_caller(alice);
+377        let result = reg.try_revoke_role(&CONTROLLER_ROLE, &alice);
+378        assert_eq!(result.unwrap_err(), AccessControlError::MissingRole.into());
+379
+380        // Admin can revoke roles.
+381        env.set_caller(admin);
+382        reg.revoke_role(&CONTROLLER_ROLE, &alice);
+383        assert!(!reg.has_role(&CONTROLLER_ROLE, &alice));
+384    }
+385
+386    #[test]
+387    fn test_admin_can_manage_grace_period() {
+388        let mut ctx = TestContext::install_raw();
+389        let (env, reg) = (ctx.env, &mut ctx.registrar);
+390        let (admin, alice) = (ctx.admin, ctx.alice);
+391
+392        // Given the initial grace period is 0.
+393        assert_eq!(reg.grace_period(), 0);
+394
+395        // When Admin sets grace period.
+396        env.set_caller(admin);
+397        reg.set_grace_period(100);
+398
+399        // Then grace period is changed.
+400        assert_eq!(reg.grace_period(), 100);
+401
+402        // When Alice tries to set grace period.
+403        env.set_caller(alice);
+404        let result = reg.try_set_grace_period(200);
+405        assert_eq!(result, Err(AccessControlError::MissingRole.into()));
+406
+407        // Then grace period is not changed.
+408        assert_eq!(reg.grace_period(), 100);
+409    }
+410
+411    #[test]
+412    fn test_grace_period_too_long() {
+413        let mut ctx = TestContext::install_raw();
+414        let (env, reg) = (ctx.env, &mut ctx.registrar);
+415        let admin = ctx.admin;
+416
+417        // When Admin sets too long grace period.
+418        env.set_caller(admin);
+419        let result = reg.try_set_grace_period(MAX_GRACE_PERIOD + 1);
+420
+421        // Then it fails with error.
+422        assert_eq!(result, Err(RegistrarError::GracePeriodTooLong.into()));
+423    }
+424
+425    #[test]
+426    fn test_set_grace_period_emits_event() {
+427        let mut ctx = TestContext::install_raw();
+428        let (env, reg) = (ctx.env, &mut ctx.registrar);
+429        let admin = ctx.admin;
+430
+431        // When Admin sets grace period.
+432        env.set_caller(admin);
+433        reg.set_grace_period(MAX_GRACE_PERIOD);
+434
+435        // Then the contract emits GracePeriodChanged event.
+436        assert!(env.emitted(reg, GracePeriodChanged::name()));
+437    }
+438
+439    #[test]
+440    fn register_with_past_expiration_time_fails() {
+441        let mut ctx = TestContext::install_and_setup();
+442        let (admin, alice) = (ctx.admin, ctx.alice);
+443
+444        // When Admin try to register with expiration time in past.
+445        let token_expiration = INIT_TIME - 1;
+446        let voucher_expiration = ctx.voucher_expiration_time();
+447        let result = ctx.try_name_register(
+448            admin,
+449            alice,
+450            TOKEN_NAME,
+451            token_expiration,
+452            voucher_expiration,
+453        );
+454
+455        // Then registration fails.
+456        assert_eq!(result, Err(RegistrarError::ExpirationDateInThePast.into()));
+457    }
+458
+459    #[test]
+460    fn register_with_expired_voucher_fails() {
+461        let mut ctx = TestContext::install_and_setup();
+462        let (admin, alice) = (ctx.admin, ctx.alice);
+463
+464        // When Admin try to register with expiration time in past.
+465        let token_expiration = ctx.token_expiration_time();
+466        let voucher_expiration = INIT_TIME - 1;
+467        let result = ctx.try_name_register(
+468            admin,
+469            alice,
+470            TOKEN_NAME,
+471            token_expiration,
+472            voucher_expiration,
+473        );
+474
+475        // Then registration fails.
+476        assert_eq!(result, Err(RegistrarError::VoucherExpired.into()));
+477    }
+478
+479    #[test]
+480    fn register_invalid_label_fails() {
+481        let mut ctx = TestContext::install_and_setup();
+482        let (admin, alice) = (ctx.admin, ctx.alice);
+483        let invalid_name = "invalid-label-";
+484
+485        // When Admin tries to register an invalid label.
+486        let result = ctx.try_name_register(
+487            admin,
+488            alice,
+489            invalid_name,
+490            ctx.token_expiration_time(),
+491            ctx.voucher_expiration_time(),
+492        );
+493
+494        // Then registration fails.
+495        assert_eq!(
+496            result.unwrap_err(),
+497            OdraError::from(RegistrarError::TokenNameIsNotValid)
+498        );
+499    }
+500
+501    #[test]
+502    fn test_register_successful_mint() {
+503        let mut ctx = TestContext::install_and_setup();
+504        let (admin, alice) = (ctx.admin, ctx.alice);
+505
+506        // When Admin try to register with expiration time in future.
+507        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+508
+509        // Then token is minted.
+510        ctx.expect_name_is_registered(alice, TOKEN_NAME);
+511    }
+512
+513    #[test]
+514    fn register_the_same_name_before_expiration() {
+515        let mut ctx = TestContext::install_and_setup();
+516        let (admin, alice) = (ctx.admin, ctx.alice);
+517
+518        // Given Alice has a token.
+519        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+520
+521        // And token not expired.
+522        ctx.advance_block_time(TOKEN_EXPIRATION / 2);
+523
+524        // When Admin tries to register the same token again.
+525        let result = ctx.try_name_register(
+526            admin,
+527            alice,
+528            TOKEN_NAME,
+529            ctx.token_expiration_time(),
+530            ctx.voucher_expiration_time(),
+531        );
+532
+533        // Then registration fails.
+534        assert_eq!(result, Err(RegistrarError::TokenNotExpired.into()));
+535    }
+536
+537    #[test]
+538    fn register_the_same_name_before_grace_period() {
+539        let mut ctx = TestContext::install_and_setup();
+540        let (admin, alice) = (ctx.admin, ctx.alice);
+541
+542        // Given Alice has a token.
+543        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+544
+545        // And token expired, but within grace period.
+546        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + PENDING_DELETE_PERIOD - 1);
+547
+548        // When Admin tries to register the same token again.
+549        let result = ctx.try_name_register(
+550            admin,
+551            alice,
+552            TOKEN_NAME,
+553            ctx.token_expiration_time(),
+554            ctx.voucher_expiration_time(),
+555        );
+556
+557        // Then registration fails.
+558        assert_eq!(result, Err(RegistrarError::TokenNotExpired.into()));
+559    }
+560
+561    #[test]
+562    fn register_the_same_name_after_grace_period() {
+563        let mut ctx = TestContext::install_and_setup();
+564        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
+565        // Given Alice has a token.
+566        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+567
+568        // And token expired, and grace period is over.
+569        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + PENDING_DELETE_PERIOD + 1);
+570
+571        // When Admin tries to register the same token again.
+572        ctx.with_name_registered(admin, bob, TOKEN_NAME);
+573
+574        // Then Alice's token is burned.
+575        let event: Burn = ctx.token.get_event(-4).unwrap();
+576        let expected = Burn {
+577            from: alice,
+578            token_id: generate_token_id(TOKEN_NAME),
+579        };
+580        assert_eq!(event, expected);
+581
+582        // And Bob's token is minted.
+583        ctx.expect_name_is_registered(bob, TOKEN_NAME);
+584    }
+585
+586    #[test]
+587    fn test_token_expiration_after_grace_period() {
+588        let mut ctx = TestContext::install_and_setup();
+589        let (admin, alice) = (ctx.admin, ctx.alice);
+590
+591        // Given Alice has a token.
+592        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+593
+594        // And is after grace period.
+595        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + PENDING_DELETE_PERIOD + 1);
+596
+597        // When anyone tries to expire the token.
+598        ctx.with_name_expired(TOKEN_NAME);
+599
+600        // Then token is burned.
+601        assert_eq!(ctx.token.balance_of(alice), U256::zero());
+602    }
+603
+604    #[test]
+605    fn on_expiration_default_resolver_is_invalidated() {
+606        let mut ctx = TestContext::install_and_setup();
+607        let (admin, alice) = (ctx.admin, ctx.alice);
+608
+609        let full_domain = format!("{}.cspr", TOKEN_NAME);
+610
+611        // Given Alice has a token.
+612        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+613        // And a resolution for the token is set.
+614        ctx.set_caller(alice);
+615        ctx.default_resolver
+616            .set_resolution(full_domain.clone(), Some(alice));
+617        assert_eq!(
+618            ctx.default_resolver.resolve(full_domain.clone()),
+619            Some(alice)
+620        );
+621        assert_eq!(
+622            ctx.token.resolver(generate_token_id(TOKEN_NAME)),
+623            Some(ctx.default_resolver.address())
+624        );
+625
+626        // And is after grace period.
+627        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + PENDING_DELETE_PERIOD + 1);
+628
+629        // When anyone tries to expire the token.
+630        ctx.with_name_expired(TOKEN_NAME);
+631
+632        // Then the resolution is cleared.
+633        assert_eq!(ctx.default_resolver.resolve(full_domain), None);
+634    }
+635
+636    #[test]
+637    fn test_multi_tokens_expiration_after_grace_period() {
+638        let mut ctx = TestContext::install_and_setup();
+639        let (admin, alice) = (ctx.admin, ctx.alice);
+640        let tokens = vec!["t1", "t2", "t3", "t4", "t5"];
+641
+642        // Given Alice has 5 tokens.
+643        ctx.with_multi_names_registered(admin, alice, tokens.clone());
+644        assert_eq!(ctx.token.balance_of(alice), U256::from(5));
+645        // And is after grace period.
+646        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + PENDING_DELETE_PERIOD + 1);
+647
+648        // When anyone tries to expire the tokens.
+649        ctx.with_names_expired(tokens);
+650
+651        // Then all the tokens are burned.
+652        assert_eq!(ctx.token.balance_of(alice), U256::from(0));
+653    }
+654
+655    #[test]
+656    fn test_admin_transfer() {
+657        let mut ctx = TestContext::install_and_setup();
+658        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
+659
+660        // Given Alice has a token.
+661        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+662
+663        ctx.admin_transfer(bob, vec![TOKEN_NAME]);
+664
+665        // Then Alice's token is transferred to Bob.
+666        assert_eq!(ctx.token.balance_of(alice), U256::from(0));
+667        assert_eq!(ctx.token.balance_of(bob), U256::from(1));
+668    }
+669
+670    #[test]
+671    fn test_admin_transfer_clears_default_resolver() {
+672        let mut ctx = TestContext::install_and_setup();
+673        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
+674        let full_domain = format!("{}.cspr", TOKEN_NAME);
+675
+676        // Given Alice has a token.
+677        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+678
+679        // And a resolution for the token is set
+680        ctx.set_caller(alice);
+681        ctx.default_resolver
+682            .set_resolution(full_domain.clone(), Some(alice));
+683        assert_eq!(
+684            ctx.default_resolver.resolve(full_domain.clone()),
+685            Some(alice)
+686        );
+687        assert_eq!(
+688            ctx.token.resolver(generate_token_id(TOKEN_NAME)),
+689            Some(ctx.default_resolver.address())
+690        );
+691
+692        ctx.admin_transfer(bob, vec![TOKEN_NAME]);
+693
+694        // Then the resolution is cleared.
+695        assert_eq!(ctx.default_resolver.resolve(full_domain), None);
+696    }
+697
+698    #[test]
+699    fn test_admin_transfer_sets_default_resolver() {
+700        let mut ctx = TestContext::install_and_setup();
+701        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
+702
+703        // Given Alice has a token.
+704        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+705
+706        // And change the resolver
+707        let resolver =
+708            Address::new("hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a")
+709                .unwrap();
+710        ctx.set_caller(alice);
+711        ctx.token
+712            .set_resolver(generate_token_id(TOKEN_NAME), resolver);
+713
+714        let json = ctx.token.token_metadata(generate_token_id(TOKEN_NAME));
+715        let actual_resolver = NameTokenMetadata::try_from(json)
+716            .unwrap()
+717            .resolver()
+718            .unwrap();
+719        assert_eq!(actual_resolver, Some(resolver));
+720
+721        ctx.admin_transfer(bob, vec![TOKEN_NAME]);
+722
+723        // Then the resolution is cleared.
+724        let json = ctx.token.token_metadata(generate_token_id(TOKEN_NAME));
+725        let actual_resolver = NameTokenMetadata::try_from(json)
+726            .unwrap()
+727            .resolver()
+728            .unwrap();
+729        assert_eq!(actual_resolver, Some(ctx.token.get_default_resolver()));
+730    }
+731
+732    #[test]
+733    fn test_admin_burn() {
+734        let mut ctx = TestContext::install_and_setup();
+735        let (admin, alice) = (ctx.admin, ctx.alice);
+736
+737        // Given Alice has a token.
+738        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+739
+740        ctx.admin_burn(vec![TOKEN_NAME]);
+741
+742        // Then Alice's token is burned.
+743        assert_eq!(ctx.token.balance_of(alice), U256::from(0));
+744    }
+745
+746    #[test]
+747    fn test_admin_burn_clears_default_resolver() {
+748        let mut ctx = TestContext::install_and_setup();
+749        let (admin, alice) = (ctx.admin, ctx.alice);
+750        let full_domain = format!("{}.cspr", TOKEN_NAME);
+751
+752        // Given Alice has a token.
+753        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+754
+755        // And a resolution for the token is set
+756        ctx.set_caller(alice);
+757        ctx.default_resolver
+758            .set_resolution(full_domain.clone(), Some(alice));
+759        assert_eq!(
+760            ctx.default_resolver.resolve(full_domain.clone()),
+761            Some(alice)
+762        );
+763        assert_eq!(
+764            ctx.token.resolver(generate_token_id(TOKEN_NAME)),
+765            Some(ctx.default_resolver.address())
+766        );
+767
+768        ctx.admin_burn(vec![TOKEN_NAME]);
+769
+770        // Then the resolution is cleared.
+771        assert_eq!(ctx.default_resolver.resolve(full_domain), None);
+772    }
+773
+774    #[test]
+775    fn renew_with_expired_voucher_fails() {
+776        let mut ctx = TestContext::install_and_setup();
+777        let (admin, alice) = (ctx.admin, ctx.alice);
+778
+779        // Given Alice has a token.
+780        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+781
+782        // When Admin tries to renew the token.
+783        ctx.set_caller(admin);
+784
+785        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
+786        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
+787        let tokens = vec![TokenRenewalInfo::new(
+788            generate_token_id(TOKEN_NAME),
+789            token_expiration,
+790        )];
+791        let voucher = RenewalVoucher::new(tokens, voucher_expiration);
+792        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD - 1);
+793        let result = ctx.registrar.try_controller_prolong(voucher);
+794
+795        // Then registration fails.
+796        assert_eq!(result, Err(RegistrarError::VoucherExpired.into()));
+797    }
+798
+799    #[test]
+800    fn renew_when_paused_fails() {
+801        let mut ctx = TestContext::install_and_setup();
+802        let (admin, alice) = (ctx.admin, ctx.alice);
+803
+804        // Given Alice has a token.
+805        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+806        ctx.set_caller(admin);
+807        ctx.registrar.pause();
+808
+809        // When Admin tries to renew the token.
+810        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
+811        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
+812        let tokens = vec![TokenRenewalInfo::new(
+813            generate_token_id(TOKEN_NAME),
+814            token_expiration,
+815        )];
+816        let voucher = RenewalVoucher::new(tokens, voucher_expiration);
+817        let result = ctx.registrar.try_controller_prolong(voucher);
+818
+819        // Then registration fails.
+820        assert_eq!(
+821            result,
+822            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+823        );
+824    }
+825
+826    #[test]
+827    fn test_renew() {
+828        let mut ctx = TestContext::install_and_setup();
+829        let (admin, alice) = (ctx.admin, ctx.alice);
+830
+831        // Given Alice has a token.
+832        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+833
+834        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD - 1);
+835        // When Admin tries to renew the token.
+836        let test_token_name = TOKEN_NAME;
+837        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
+838        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION + GRACE_PERIOD;
+839        let tokens = vec![TokenRenewalInfo::new(
+840            generate_token_id(test_token_name),
+841            token_expiration,
+842        )];
+843        let voucher = RenewalVoucher::new(tokens, voucher_expiration);
+844        ctx.set_caller(admin);
+845        ctx.registrar.controller_prolong(voucher);
+846
+847        // Then token expiration is updated.
+848        let metadata = ctx.token.token_metadata(generate_token_id(test_token_name));
+849        let expected = NameTokenMetadata::with_resolver(
+850            TOKEN_NAME,
+851            INIT_TIME + 2 * TOKEN_EXPIRATION,
+852            "",
+853            ctx.default_resolver.address(),
+854        );
+855        assert_eq!(metadata, expected.to_vec());
+856    }
+857
+858    #[test]
+859    fn test_renew_after_grace_period_fails() {
+860        let mut ctx = TestContext::install_and_setup();
+861        let (admin, alice) = (ctx.admin, ctx.alice);
+862
+863        // Given Alice has a token.
+864        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+865
+866        ctx.advance_block_time(TOKEN_EXPIRATION + GRACE_PERIOD + 1);
+867        // When Admin tries to renew the token.
+868        let test_token_name = TOKEN_NAME;
+869        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
+870        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION + GRACE_PERIOD + 1;
+871        let tokens = vec![TokenRenewalInfo::new(
+872            generate_token_id(test_token_name),
+873            token_expiration,
+874        )];
+875        let voucher = RenewalVoucher::new(tokens, voucher_expiration);
+876        ctx.set_caller(admin);
+877        let result = ctx.registrar.try_controller_prolong(voucher);
+878
+879        // Then registration fails.
+880        assert_eq!(result, Err(RegistrarError::GracePeriodExpired.into()));
+881    }
+882
+883    #[test]
+884    fn resolve_with_invalid_domain() {
+885        let mut ctx = TestContext::install_and_setup();
+886        let (admin, alice) = (ctx.admin, ctx.alice);
+887        let full_domain = "invalid".to_string();
+888
+889        // Given Alice has a token.
+890        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+891
+892        // When anyone tries to resolve an invalid domain.
+893        let result = ctx.registrar.resolve(full_domain);
+894
+895        // Then the result is None.
+896        assert_eq!(result, None);
+897    }
+898
+899    #[test]
+900    fn resolve_with_invalid_token() {
+901        let ctx = TestContext::install_and_setup();
+902        let full_domain = "odra.cspr".to_string();
+903
+904        // When anyone tries to resolve an invalid domain.
+905        let result = ctx.registrar.resolve(full_domain);
+906
+907        // Then the result is None.
+908        assert_eq!(result, None);
+909    }
+910
+911    #[test]
+912    fn resolve_with_valid_domain() {
+913        let mut ctx = TestContext::install_and_setup();
+914        let (admin, alice) = (ctx.admin, ctx.alice);
+915        let full_domain = "odra.cspr".to_string();
+916
+917        // Given Alice has a token.
+918        ctx.with_name_registered(admin, alice, "odra");
+919
+920        ctx.set_caller(alice);
+921        ctx.default_resolver
+922            .set_resolution(full_domain.clone(), Some(alice));
+923
+924        // When anyone tries to resolve a valid domain.
+925        let result = ctx.registrar.resolve(full_domain);
+926
+927        // Then the result is the token owner.
+928        assert_eq!(result, Some(alice));
+929    }
+930
+931    #[test]
+932    fn test_controller_register_fails_when_paused() {
+933        let mut ctx = TestContext::install_and_setup();
+934        let (admin, alice) = (ctx.admin, ctx.alice);
+935
+936        // Given Alice has a token.
+937        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+938        ctx.set_caller(admin);
+939        ctx.registrar.pause();
+940
+941        // When Admin tries to register the token.
+942        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
+943        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
+944        let asset_uri = "https://example.com/asset";
+945        let names = vec![NameMintInfo::new(
+946            TOKEN_NAME,
+947            alice,
+948            token_expiration,
+949            asset_uri,
+950        )];
+951        let voucher = TokenizationVoucher::new(names, voucher_expiration);
+952        let result = ctx.registrar.try_controller_register(voucher);
+953
+954        // Then registration fails.
+955        assert_eq!(
+956            result,
+957            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+958        );
+959    }
+960
+961    #[test]
+962    fn test_controller_register_and_prolong_fails_when_paused() {
+963        let mut ctx = TestContext::install_and_setup();
+964        let (admin, alice) = (ctx.admin, ctx.alice);
+965
+966        // Given Alice has a token.
+967        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+968        ctx.set_caller(admin);
+969        ctx.registrar.pause();
+970
+971        // When Admin tries to register the token.
+972        let token_expiration = INIT_TIME + 2 * TOKEN_EXPIRATION;
+973        let voucher_expiration = INIT_TIME + TOKEN_EXPIRATION;
+974        let asset_uri = "https://example.com/asset";
+975        let names = vec![NameMintInfo::new(
+976            TOKEN_NAME,
+977            alice,
+978            token_expiration,
+979            asset_uri,
+980        )];
+981        let tokens = vec![TokenRenewalInfo::new(
+982            generate_token_id(TOKEN_NAME),
+983            token_expiration,
+984        )];
+985        let renewal_voucher = RenewalVoucher::new(tokens, voucher_expiration);
+986        let voucher = TokenizationVoucher::new(names, voucher_expiration);
+987        let result = ctx
+988            .registrar
+989            .try_controller_prolong_and_register(renewal_voucher, voucher);
+990
+991        // Then registration fails.
+992        assert_eq!(
+993            result,
+994            Err(odra_modules::security::errors::Error::UnpausedRequired.into())
+995        );
+996    }
+997}
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/resolver.rs.html b/docs/src/casper_name_contracts/contracts/resolver.rs.html index c768c14..89dec47 100644 --- a/docs/src/casper_name_contracts/contracts/resolver.rs.html +++ b/docs/src/casper_name_contracts/contracts/resolver.rs.html @@ -1,947 +1,473 @@ -resolver.rs - source

casper_name_contracts/contracts/
resolver.rs

-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
use odra::{casper_types::U256, prelude::*};
-use odra_modules::access::{AccessControl, Role, DEFAULT_ADMIN_ROLE};
-
-use super::{name_token::NameTokenContractRef, token_id::ToTokenId, utils};
-
-#[odra::external_contract]
-pub trait Resolver {
-    fn init(&mut self, name_token: Address);
-    fn set_name_token(&mut self, name_token: Address);
-    fn set_resolution(&mut self, full_domain: Domain, address: Option<Address>);
-    fn resolve(&self, full_domain: Domain) -> Option<Address>;
-    fn invalidate_resolutions(&mut self, token_id: TokenId);
-}
-
-type Nonce = u32;
-type Domain = String;
-type TokenId = U256;
-
-/// Event emitted when a resolution is changed.
-#[odra::event]
-pub struct ResolutionChanged {
-    full_domain: String,
-    address: Option<Address>,
-}
-
-/// Event emitted when a resolution is cleared.
-#[odra::event]
-pub struct ResolutionCleared {
-    token_id: U256,
-}
-
-/// Event emitted when the name token address is changed.
-#[odra::event]
-pub struct NameTokenAddressChanged {
-    new_name_token: Address,
-}
-
-/// Default Resolver smart contract. It handles the resolution of domain names to addresses.
-#[odra::module(
-    errors = ResolverError,
-    events = [ResolutionChanged, ResolutionCleared, NameTokenAddressChanged]
-)]
-pub struct DefaultResolver {
-    access_control: SubModule<AccessControl>,
-    name_token: External<NameTokenContractRef>,
-    nonces: Mapping<TokenId, Nonce>,
-    resolutions: Mapping<(TokenId, String, Nonce), Option<Address>>,
-}
-
-#[odra::module]
-impl DefaultResolver {
-    delegate! {
-        to self.access_control {
-            fn has_role(&self, role: &Role, address: &Address) -> bool;
-            fn grant_role(&mut self, role: &Role, address: &Address);
-            fn revoke_role(&mut self, role: &Role, address: &Address);
-        }
-    }
-
-    /// Initializes the default resolver with the name token contract address.
-    /// The caller is granted the admin role.
-    pub fn init(&mut self, name_token: Address) {
-        if !name_token.is_contract() {
-            self.revert(ResolverError::InvalidTokenName);
-        }
-        self.name_token.set(name_token);
-
-        let admin = self.env().caller();
-        self.access_control
-            .unchecked_grant_role(&DEFAULT_ADMIN_ROLE, &admin);
-    }
-
-    /// Admin only. Sets the name token contract address.
-    pub fn set_name_token(&mut self, name_token: Address) {
-        if !name_token.is_contract() {
-            self.revert(ResolverError::InvalidTokenName);
-        }
-        if !self.has_role(&DEFAULT_ADMIN_ROLE, &self.env().caller()) {
-            self.env()
-                .revert(ResolverError::UnauthorizedTokenAddressUpdate);
-        }
-        self.name_token.set(name_token);
-        self.env().emit_event(NameTokenAddressChanged {
-            new_name_token: name_token,
-        });
-    }
-
-    /// Token owner only. Sets the resolution for a domain to an address.
-    pub fn set_resolution(&mut self, full_domain: Domain, address: Option<Address>) {
-        let env = self.env();
-        let token_id = self
-            .extract_token_id(&full_domain)
-            .unwrap_or_revert_with(self, ResolverError::InvalidDomain);
-        let caller = env.caller();
-
-        if !self.name_token.is_token_valid(token_id) {
-            env.revert(ResolverError::ResolutionSetWithInvalidToken);
-        }
-
-        if self.owner_of(token_id) != Some(caller) {
-            env.revert(ResolverError::ResolutionSetByInvalidOwner);
-        }
-
-        if !utils::is_domain_valid(&full_domain) {
-            env.revert(ResolverError::InvalidSubdomainFormat);
-        }
-
-        let nonce = self.nonce(&token_id);
-        self.resolutions
-            .set(&(token_id, full_domain.clone(), nonce), address);
-
-        env.emit_event(ResolutionChanged {
-            full_domain,
-            address,
-        });
-    }
-
-    /// Resolves a domain to an address.
-    pub fn resolve(&self, full_domain: Domain) -> Option<Address> {
-        let token_id = self.extract_token_id(&full_domain)?;
-        let nonce = self.nonce(&token_id);
-
-        self.resolutions
-            .get(&(token_id, full_domain, nonce))
-            .flatten()
-    }
-
-    /// Invalidates all the resolutions for a token. Only the token owner or the admin can do this.
-    pub fn invalidate_resolutions(&mut self, token_id: TokenId) {
-        let env = self.env();
-        let caller = env.caller();
-
-        if !self.has_role(&DEFAULT_ADMIN_ROLE, &caller) && self.owner_of(token_id) != Some(caller) {
-            self.env().revert(ResolverError::UnauthorizedInvalidation);
-        }
-        self.nonces.add(&token_id, 1);
-
-        env.emit_event(ResolutionCleared { token_id });
-    }
-
-    #[inline]
-    fn extract_token_id(&self, full_domain: &str) -> Option<TokenId> {
-        let token_name = utils::extract_token_name(&full_domain)?;
-        Some(self.token_id(token_name))
-    }
-
-    #[inline]
-    fn nonce(&self, token_id: &TokenId) -> Nonce {
-        self.nonces.get_or_default(token_id)
-    }
-
-    #[inline]
-    fn owner_of(&self, token_id: TokenId) -> Option<Address> {
-        self.name_token.owner_of(token_id)
-    }
-}
-
-#[odra::odra_error]
-pub enum ResolverError {
-    ResolutionSetWithInvalidToken = 1401,
-    ResolutionSetByInvalidOwner = 1402,
-    UnauthorizedInvalidation = 1403,
-    UnauthorizedTokenAddressUpdate = 1404,
-    InvalidDomain = 1405,
-    InvalidSubdomainFormat = 1406,
-    InvalidTokenName = 1407,
-}
-
-#[cfg(test)]
-mod tests {
-    use odra::{casper_event_standard::EventInstance, host::Deployer};
-
-    use super::*;
-    use crate::test_context::{generate_token_id, TestContext, TOKEN_EXPIRATION};
-
-    const TOKEN_NAME: &str = "odra";
-    const NON_EXISTENT_TOKEN_DOMAIN: &str = "odra2.cspr";
-    const NON_CSPR_DOMAIN: &str = "odra.com";
-    const MAIN_DOMAIN: &str = "odra.cspr";
-    const SUBDOMAIN: &str = "docs.odra.cspr";
-    const INVALID_SUBDOMAIN: &str = "-docs.odra.cspr";
-
-    #[test]
-    fn deploy_fails_if_account_set_as_name_token() {
-        let env = odra_test::env();
-        let result = DefaultResolver::try_deploy(
-            &env,
-            DefaultResolverInitArgs {
-                name_token: env.get_account(1),
-            },
-        );
-        assert!(result.is_err());
-    }
-
-    #[test]
-    fn deployer_is_admin() {
-        // Given the contract is deployed
-        let (ctx, admin, _, _) = setup();
-        // Then the deployer is the admin
-        assert!(ctx.default_resolver.has_role(&DEFAULT_ADMIN_ROLE, &admin));
-    }
-
-    #[test]
-    fn only_admin_can_set_name_token() {
-        let (mut ctx, admin, alice, _) = setup();
-        let contract_address = ctx.controller.address();
-
-        // When alice tries to set the name token
-        ctx.set_caller(alice);
-        // Then the operation fails
-        assert!(ctx
-            .default_resolver
-            .try_set_name_token(contract_address)
-            .is_err());
-
-        // When the admin sets the name token
-        ctx.set_caller(admin);
-        // Then the operation succeeds
-        assert!(ctx
-            .default_resolver
-            .try_set_name_token(contract_address)
-            .is_ok());
-    }
-
-    #[test]
-    fn name_token_must_be_a_contract() {
-        let (mut ctx, admin, alice, _) = setup();
-
-        // When the admin tries to set a non-contract address as the name token
-        ctx.set_caller(admin);
-        let result = ctx.default_resolver.try_set_name_token(alice);
-        // Then the operation fails
-        assert_eq!(result, Err(ResolverError::InvalidTokenName.into()));
-    }
-
-    #[test]
-    fn set_name_token_emits_event() {
-        let (mut ctx, admin, _, _) = setup();
-        let name_token = ctx.token.address();
-
-        // When the admin updates the name token address.
-        ctx.set_caller(admin);
-        ctx.default_resolver.set_name_token(name_token);
-        // Then the event is emitted.
-        assert!(ctx
-            .env
-            .emitted(&ctx.default_resolver, NameTokenAddressChanged::name()))
-    }
-
-    #[test]
-    fn anyone_can_resolve() {
-        let (mut ctx, _, alice, bob) = setup();
-
-        // When alice sets the resolution for the main domain
-        set_resolution_with_caller(&mut ctx, MAIN_DOMAIN, alice, alice);
-        // Then alice can resolve the main domain
-        assert_eq!(
-            resolve_with_caller(&mut ctx, MAIN_DOMAIN, alice),
-            Some(alice)
-        );
-        // And bob can also resolve the main domain
-        assert_eq!(resolve_with_caller(&mut ctx, MAIN_DOMAIN, bob), Some(alice));
-    }
-
-    #[test]
-    fn only_owner_can_set_resolution() {
-        let (mut ctx, admin, alice, bob) = setup();
-
-        // When alice sets the resolution for the main domain
-        ctx.set_caller(alice);
-        // Then the operation succeeds
-        assert!(try_set_resolution(&mut ctx, MAIN_DOMAIN, alice).is_ok());
-
-        // When admin sets the resolution for the main domain
-        ctx.set_caller(admin);
-        // Then the operation fails
-        assert_eq!(
-            try_set_resolution(&mut ctx, MAIN_DOMAIN, admin).err(),
-            Some(ResolverError::ResolutionSetByInvalidOwner.into())
-        );
-        // When bob sets the resolution for the main domain
-        ctx.set_caller(bob);
-        // Then the operation fails
-        assert_eq!(
-            try_set_resolution(&mut ctx, MAIN_DOMAIN, bob).err(),
-            Some(ResolverError::ResolutionSetByInvalidOwner.into())
-        );
-    }
-
-    #[test]
-    fn cannot_set_resolution_with_non_existent_token() {
-        let (mut ctx, _, alice, _) = setup();
-
-        // When alice tries to set the resolution for a non-existent token
-        ctx.set_caller(alice);
-        let result = try_set_resolution(&mut ctx, NON_EXISTENT_TOKEN_DOMAIN, alice);
-        // Then the operation fails
-        assert_eq!(
-            result,
-            Err(ResolverError::ResolutionSetWithInvalidToken.into())
-        );
-    }
-
-    #[test]
-    fn cannot_set_resolution_with_expired_token() {
-        // Given the token has expired
-        let (mut ctx, _, alice, _) = setup();
-        ctx.advance_block_time(TOKEN_EXPIRATION + 1);
-
-        // When alice tries to set the resolution
-        ctx.set_caller(alice);
-        let result = try_set_resolution(&mut ctx, SUBDOMAIN, alice);
-        // Then the operation fails
-        assert_eq!(
-            result,
-            Err(ResolverError::ResolutionSetWithInvalidToken.into())
-        );
-    }
-
-    #[test]
-    fn cannot_set_resolution_with_non_cspr_domain() {
-        let (mut ctx, _, alice, _) = setup();
-        // When alice tries to set the resolution for a non-cspr domain
-        ctx.set_caller(alice);
-        let result = try_set_resolution(&mut ctx, NON_CSPR_DOMAIN, alice);
-        // Then the operation fails
-        assert_eq!(result, Err(ResolverError::InvalidDomain.into()));
-    }
-
-    #[test]
-    fn cannot_set_resolution_with_burned_token() {
-        // Given the token has been burned
-        let (mut ctx, admin, alice, _) = setup();
-        ctx.set_caller(admin);
-        ctx.token.burn(generate_token_id(TOKEN_NAME));
-        // When alice tries to set the resolution
-        ctx.set_caller(alice);
-        let result = try_set_resolution(&mut ctx, SUBDOMAIN, alice);
-        // Then the operation fails
-        assert_eq!(
-            result,
-            Err(ResolverError::ResolutionSetWithInvalidToken.into())
-        );
-    }
-
-    #[test]
-    fn set_resolution_for_invalid_subdomain_format() {
-        let (mut ctx, _, alice, _) = setup();
-
-        // When alice tries to set the resolution for an invalid subdomain format
-        ctx.set_caller(alice);
-        let result = try_set_resolution(&mut ctx, INVALID_SUBDOMAIN, alice);
-        // Then the operation fails
-        assert_eq!(result, Err(ResolverError::InvalidSubdomainFormat.into()));
-    }
-
-    #[test]
-    fn invalidate_erases_subdomains() {
-        let (mut ctx, _, alice, bob) = setup();
-
-        // When alice sets the resolution for the main domain and a subdomain
-        ctx.set_caller(alice);
-        set_resolution(&mut ctx, MAIN_DOMAIN, alice);
-        set_resolution(&mut ctx, SUBDOMAIN, bob);
-
-        // Then both resolutions are set
-        assert_eq!(resolve(&ctx, MAIN_DOMAIN), Some(alice));
-        assert_eq!(resolve(&ctx, SUBDOMAIN), Some(bob));
-
-        // When alice cleans up the token's resolutions
-        invalidate(&mut ctx, TOKEN_NAME);
-
-        // Then both resolutions are erased
-        assert_eq!(resolve(&ctx, MAIN_DOMAIN), None);
-        assert_eq!(resolve(&ctx, SUBDOMAIN), None);
-    }
-
-    #[test]
-    fn admin_can_invalidate_any_token() {
-        let (mut ctx, admin, alice, bob) = setup();
-
-        // When alice sets the resolution for the main domain and a subdomain
-        ctx.set_caller(alice);
-        set_resolution(&mut ctx, MAIN_DOMAIN, alice);
-        set_resolution(&mut ctx, SUBDOMAIN, bob);
-
-        // Then both resolutions are set
-        assert_eq!(resolve(&ctx, MAIN_DOMAIN), Some(alice));
-        assert_eq!(resolve(&ctx, SUBDOMAIN), Some(bob));
-
-        // When the admin cleans up alice's token's resolutions
-        invalidate_with_caller(&mut ctx, TOKEN_NAME, admin);
-
-        // Then both resolutions are erased
-        assert_eq!(resolve(&ctx, MAIN_DOMAIN), None);
-        assert_eq!(resolve(&ctx, SUBDOMAIN), None);
-    }
-
-    #[test]
-    fn only_owner_or_admin_can_invalidate() {
-        let (mut ctx, _, alice, bob) = setup();
-
-        // When alice sets the resolution for the main domain and a subdomain
-        ctx.set_caller(alice);
-        set_resolution(&mut ctx, MAIN_DOMAIN, alice);
-        set_resolution(&mut ctx, SUBDOMAIN, bob);
-
-        // Then both resolutions are set
-        assert_eq!(resolve(&ctx, MAIN_DOMAIN), Some(alice));
-        assert_eq!(resolve(&ctx, SUBDOMAIN), Some(bob));
-
-        // When bob tries to clean up alice's token's resolutions
-        ctx.set_caller(bob);
-        let result = try_invalidate(&mut ctx, TOKEN_NAME);
-        // Then the operation fails
-        assert_eq!(result, Err(ResolverError::UnauthorizedInvalidation.into()));
-    }
-
-    fn setup() -> (TestContext, Address, Address, Address) {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
-
-        ctx.with_name_registered(admin, alice, TOKEN_NAME);
-        (ctx, admin, alice, bob)
-    }
-
-    fn set_resolution(ctx: &mut TestContext, domain: &str, address: Address) {
-        ctx.default_resolver
-            .set_resolution(domain.to_string(), Some(address));
-    }
-
-    fn try_set_resolution(ctx: &mut TestContext, domain: &str, address: Address) -> OdraResult<()> {
-        ctx.default_resolver
-            .try_set_resolution(domain.to_string(), Some(address))
-    }
-
-    fn set_resolution_with_caller(
-        ctx: &mut TestContext,
-        domain: &str,
-        address: Address,
-        caller: Address,
-    ) {
-        ctx.set_caller(caller);
-        set_resolution(ctx, domain, address);
-    }
-
-    fn resolve(ctx: &TestContext, domain: &str) -> Option<Address> {
-        ctx.default_resolver.resolve(domain.to_string())
-    }
-
-    fn resolve_with_caller(
-        ctx: &mut TestContext,
-        domain: &str,
-        caller: Address,
-    ) -> Option<Address> {
-        ctx.set_caller(caller);
-        resolve(ctx, domain)
-    }
-
-    fn invalidate(ctx: &mut TestContext, token_name: &str) {
-        try_invalidate(ctx, token_name).unwrap();
-    }
-
-    fn invalidate_with_caller(ctx: &mut TestContext, token_name: &str, caller: Address) {
-        ctx.set_caller(caller);
-        invalidate(ctx, token_name);
-    }
-
-    fn try_invalidate(ctx: &mut TestContext, token_name: &str) -> OdraResult<()> {
-        ctx.default_resolver
-            .try_invalidate_resolutions(generate_token_id(token_name))
-    }
-}
-
\ No newline at end of file +resolver.rs - source

casper_name_contracts/contracts/
resolver.rs

1use odra::{casper_types::U256, prelude::*};
+2use odra_modules::access::{AccessControl, Role, DEFAULT_ADMIN_ROLE};
+3
+4use super::{name_token::NameTokenContractRef, token_id::ToTokenId, utils};
+5
+6#[odra::external_contract]
+7pub trait Resolver {
+8    fn init(&mut self, name_token: Address);
+9    fn set_name_token(&mut self, name_token: Address);
+10    fn set_resolution(&mut self, full_domain: Domain, address: Option<Address>);
+11    fn resolve(&self, full_domain: Domain) -> Option<Address>;
+12    fn invalidate_resolutions(&mut self, token_id: TokenId);
+13}
+14
+15type Nonce = u32;
+16type Domain = String;
+17type TokenId = U256;
+18
+19/// Event emitted when a resolution is changed.
+20#[odra::event]
+21pub struct ResolutionChanged {
+22    full_domain: String,
+23    address: Option<Address>,
+24}
+25
+26/// Event emitted when a resolution is cleared.
+27#[odra::event]
+28pub struct ResolutionCleared {
+29    token_id: U256,
+30}
+31
+32/// Event emitted when the name token address is changed.
+33#[odra::event]
+34pub struct NameTokenAddressChanged {
+35    new_name_token: Address,
+36}
+37
+38/// Default Resolver smart contract. It handles the resolution of domain names to addresses.
+39#[odra::module(
+40    errors = ResolverError,
+41    events = [ResolutionChanged, ResolutionCleared, NameTokenAddressChanged]
+42)]
+43pub struct DefaultResolver {
+44    access_control: SubModule<AccessControl>,
+45    name_token: External<NameTokenContractRef>,
+46    nonces: Mapping<TokenId, Nonce>,
+47    resolutions: Mapping<(TokenId, String, Nonce), Option<Address>>,
+48}
+49
+50#[odra::module]
+51impl DefaultResolver {
+52    delegate! {
+53        to self.access_control {
+54            fn has_role(&self, role: &Role, address: &Address) -> bool;
+55            fn grant_role(&mut self, role: &Role, address: &Address);
+56            fn revoke_role(&mut self, role: &Role, address: &Address);
+57        }
+58    }
+59
+60    /// Initializes the default resolver with the name token contract address.
+61    /// The caller is granted the admin role.
+62    pub fn init(&mut self, name_token: Address) {
+63        if !name_token.is_contract() {
+64            self.revert(ResolverError::InvalidTokenName);
+65        }
+66        self.name_token.set(name_token);
+67
+68        let admin = self.env().caller();
+69        self.access_control
+70            .unchecked_grant_role(&DEFAULT_ADMIN_ROLE, &admin);
+71    }
+72
+73    /// Admin only. Sets the name token contract address.
+74    pub fn set_name_token(&mut self, name_token: Address) {
+75        if !name_token.is_contract() {
+76            self.revert(ResolverError::InvalidTokenName);
+77        }
+78        if !self.has_role(&DEFAULT_ADMIN_ROLE, &self.env().caller()) {
+79            self.env()
+80                .revert(ResolverError::UnauthorizedTokenAddressUpdate);
+81        }
+82        self.name_token.set(name_token);
+83        self.env().emit_event(NameTokenAddressChanged {
+84            new_name_token: name_token,
+85        });
+86    }
+87
+88    /// Token owner only. Sets the resolution for a domain to an address.
+89    pub fn set_resolution(&mut self, full_domain: Domain, address: Option<Address>) {
+90        let env = self.env();
+91        let token_id = self
+92            .extract_token_id(&full_domain)
+93            .unwrap_or_revert_with(self, ResolverError::InvalidDomain);
+94        let caller = env.caller();
+95
+96        if !self.name_token.is_token_valid(token_id) {
+97            env.revert(ResolverError::ResolutionSetWithInvalidToken);
+98        }
+99
+100        if self.owner_of(token_id) != Some(caller) {
+101            env.revert(ResolverError::ResolutionSetByInvalidOwner);
+102        }
+103
+104        if !utils::is_domain_valid(&full_domain) {
+105            env.revert(ResolverError::InvalidSubdomainFormat);
+106        }
+107
+108        let nonce = self.nonce(&token_id);
+109        self.resolutions
+110            .set(&(token_id, full_domain.clone(), nonce), address);
+111
+112        env.emit_event(ResolutionChanged {
+113            full_domain,
+114            address,
+115        });
+116    }
+117
+118    /// Resolves a domain to an address.
+119    pub fn resolve(&self, full_domain: Domain) -> Option<Address> {
+120        let token_id = self.extract_token_id(&full_domain)?;
+121        let nonce = self.nonce(&token_id);
+122
+123        self.resolutions
+124            .get(&(token_id, full_domain, nonce))
+125            .flatten()
+126    }
+127
+128    /// Invalidates all the resolutions for a token. Only the token owner or the admin can do this.
+129    pub fn invalidate_resolutions(&mut self, token_id: TokenId) {
+130        let env = self.env();
+131        let caller = env.caller();
+132
+133        if !self.has_role(&DEFAULT_ADMIN_ROLE, &caller) && self.owner_of(token_id) != Some(caller) {
+134            self.env().revert(ResolverError::UnauthorizedInvalidation);
+135        }
+136        self.nonces.add(&token_id, 1);
+137
+138        env.emit_event(ResolutionCleared { token_id });
+139    }
+140
+141    #[inline]
+142    fn extract_token_id(&self, full_domain: &str) -> Option<TokenId> {
+143        let token_name = utils::extract_token_name(&full_domain)?;
+144        Some(self.token_id(token_name))
+145    }
+146
+147    #[inline]
+148    fn nonce(&self, token_id: &TokenId) -> Nonce {
+149        self.nonces.get_or_default(token_id)
+150    }
+151
+152    #[inline]
+153    fn owner_of(&self, token_id: TokenId) -> Option<Address> {
+154        self.name_token.owner_of(token_id)
+155    }
+156}
+157
+158#[odra::odra_error]
+159pub enum ResolverError {
+160    ResolutionSetWithInvalidToken = 1401,
+161    ResolutionSetByInvalidOwner = 1402,
+162    UnauthorizedInvalidation = 1403,
+163    UnauthorizedTokenAddressUpdate = 1404,
+164    InvalidDomain = 1405,
+165    InvalidSubdomainFormat = 1406,
+166    InvalidTokenName = 1407,
+167}
+168
+169#[cfg(test)]
+170mod tests {
+171    use odra::{casper_event_standard::EventInstance, host::Deployer};
+172
+173    use super::*;
+174    use crate::test_context::{generate_token_id, TestContext, TOKEN_EXPIRATION};
+175
+176    const TOKEN_NAME: &str = "odra";
+177    const NON_EXISTENT_TOKEN_DOMAIN: &str = "odra2.cspr";
+178    const NON_CSPR_DOMAIN: &str = "odra.com";
+179    const MAIN_DOMAIN: &str = "odra.cspr";
+180    const SUBDOMAIN: &str = "docs.odra.cspr";
+181    const INVALID_SUBDOMAIN: &str = "-docs.odra.cspr";
+182
+183    #[test]
+184    fn deploy_fails_if_account_set_as_name_token() {
+185        let env = odra_test::env();
+186        let result = DefaultResolver::try_deploy(
+187            &env,
+188            DefaultResolverInitArgs {
+189                name_token: env.get_account(1),
+190            },
+191        );
+192        assert!(result.is_err());
+193    }
+194
+195    #[test]
+196    fn deployer_is_admin() {
+197        // Given the contract is deployed
+198        let (ctx, admin, _, _) = setup();
+199        // Then the deployer is the admin
+200        assert!(ctx.default_resolver.has_role(&DEFAULT_ADMIN_ROLE, &admin));
+201    }
+202
+203    #[test]
+204    fn only_admin_can_set_name_token() {
+205        let (mut ctx, admin, alice, _) = setup();
+206        let contract_address = ctx.controller.address();
+207
+208        // When alice tries to set the name token
+209        ctx.set_caller(alice);
+210        // Then the operation fails
+211        assert!(ctx
+212            .default_resolver
+213            .try_set_name_token(contract_address)
+214            .is_err());
+215
+216        // When the admin sets the name token
+217        ctx.set_caller(admin);
+218        // Then the operation succeeds
+219        assert!(ctx
+220            .default_resolver
+221            .try_set_name_token(contract_address)
+222            .is_ok());
+223    }
+224
+225    #[test]
+226    fn name_token_must_be_a_contract() {
+227        let (mut ctx, admin, alice, _) = setup();
+228
+229        // When the admin tries to set a non-contract address as the name token
+230        ctx.set_caller(admin);
+231        let result = ctx.default_resolver.try_set_name_token(alice);
+232        // Then the operation fails
+233        assert_eq!(result, Err(ResolverError::InvalidTokenName.into()));
+234    }
+235
+236    #[test]
+237    fn set_name_token_emits_event() {
+238        let (mut ctx, admin, _, _) = setup();
+239        let name_token = ctx.token.address();
+240
+241        // When the admin updates the name token address.
+242        ctx.set_caller(admin);
+243        ctx.default_resolver.set_name_token(name_token);
+244        // Then the event is emitted.
+245        assert!(ctx
+246            .env
+247            .emitted(&ctx.default_resolver, NameTokenAddressChanged::name()))
+248    }
+249
+250    #[test]
+251    fn anyone_can_resolve() {
+252        let (mut ctx, _, alice, bob) = setup();
+253
+254        // When alice sets the resolution for the main domain
+255        set_resolution_with_caller(&mut ctx, MAIN_DOMAIN, alice, alice);
+256        // Then alice can resolve the main domain
+257        assert_eq!(
+258            resolve_with_caller(&mut ctx, MAIN_DOMAIN, alice),
+259            Some(alice)
+260        );
+261        // And bob can also resolve the main domain
+262        assert_eq!(resolve_with_caller(&mut ctx, MAIN_DOMAIN, bob), Some(alice));
+263    }
+264
+265    #[test]
+266    fn only_owner_can_set_resolution() {
+267        let (mut ctx, admin, alice, bob) = setup();
+268
+269        // When alice sets the resolution for the main domain
+270        ctx.set_caller(alice);
+271        // Then the operation succeeds
+272        assert!(try_set_resolution(&mut ctx, MAIN_DOMAIN, alice).is_ok());
+273
+274        // When admin sets the resolution for the main domain
+275        ctx.set_caller(admin);
+276        // Then the operation fails
+277        assert_eq!(
+278            try_set_resolution(&mut ctx, MAIN_DOMAIN, admin).err(),
+279            Some(ResolverError::ResolutionSetByInvalidOwner.into())
+280        );
+281        // When bob sets the resolution for the main domain
+282        ctx.set_caller(bob);
+283        // Then the operation fails
+284        assert_eq!(
+285            try_set_resolution(&mut ctx, MAIN_DOMAIN, bob).err(),
+286            Some(ResolverError::ResolutionSetByInvalidOwner.into())
+287        );
+288    }
+289
+290    #[test]
+291    fn cannot_set_resolution_with_non_existent_token() {
+292        let (mut ctx, _, alice, _) = setup();
+293
+294        // When alice tries to set the resolution for a non-existent token
+295        ctx.set_caller(alice);
+296        let result = try_set_resolution(&mut ctx, NON_EXISTENT_TOKEN_DOMAIN, alice);
+297        // Then the operation fails
+298        assert_eq!(
+299            result,
+300            Err(ResolverError::ResolutionSetWithInvalidToken.into())
+301        );
+302    }
+303
+304    #[test]
+305    fn cannot_set_resolution_with_expired_token() {
+306        // Given the token has expired
+307        let (mut ctx, _, alice, _) = setup();
+308        ctx.advance_block_time(TOKEN_EXPIRATION + 1);
+309
+310        // When alice tries to set the resolution
+311        ctx.set_caller(alice);
+312        let result = try_set_resolution(&mut ctx, SUBDOMAIN, alice);
+313        // Then the operation fails
+314        assert_eq!(
+315            result,
+316            Err(ResolverError::ResolutionSetWithInvalidToken.into())
+317        );
+318    }
+319
+320    #[test]
+321    fn cannot_set_resolution_with_non_cspr_domain() {
+322        let (mut ctx, _, alice, _) = setup();
+323        // When alice tries to set the resolution for a non-cspr domain
+324        ctx.set_caller(alice);
+325        let result = try_set_resolution(&mut ctx, NON_CSPR_DOMAIN, alice);
+326        // Then the operation fails
+327        assert_eq!(result, Err(ResolverError::InvalidDomain.into()));
+328    }
+329
+330    #[test]
+331    fn cannot_set_resolution_with_burned_token() {
+332        // Given the token has been burned
+333        let (mut ctx, admin, alice, _) = setup();
+334        ctx.set_caller(admin);
+335        ctx.token.burn(generate_token_id(TOKEN_NAME));
+336        // When alice tries to set the resolution
+337        ctx.set_caller(alice);
+338        let result = try_set_resolution(&mut ctx, SUBDOMAIN, alice);
+339        // Then the operation fails
+340        assert_eq!(
+341            result,
+342            Err(ResolverError::ResolutionSetWithInvalidToken.into())
+343        );
+344    }
+345
+346    #[test]
+347    fn set_resolution_for_invalid_subdomain_format() {
+348        let (mut ctx, _, alice, _) = setup();
+349
+350        // When alice tries to set the resolution for an invalid subdomain format
+351        ctx.set_caller(alice);
+352        let result = try_set_resolution(&mut ctx, INVALID_SUBDOMAIN, alice);
+353        // Then the operation fails
+354        assert_eq!(result, Err(ResolverError::InvalidSubdomainFormat.into()));
+355    }
+356
+357    #[test]
+358    fn invalidate_erases_subdomains() {
+359        let (mut ctx, _, alice, bob) = setup();
+360
+361        // When alice sets the resolution for the main domain and a subdomain
+362        ctx.set_caller(alice);
+363        set_resolution(&mut ctx, MAIN_DOMAIN, alice);
+364        set_resolution(&mut ctx, SUBDOMAIN, bob);
+365
+366        // Then both resolutions are set
+367        assert_eq!(resolve(&ctx, MAIN_DOMAIN), Some(alice));
+368        assert_eq!(resolve(&ctx, SUBDOMAIN), Some(bob));
+369
+370        // When alice cleans up the token's resolutions
+371        invalidate(&mut ctx, TOKEN_NAME);
+372
+373        // Then both resolutions are erased
+374        assert_eq!(resolve(&ctx, MAIN_DOMAIN), None);
+375        assert_eq!(resolve(&ctx, SUBDOMAIN), None);
+376    }
+377
+378    #[test]
+379    fn admin_can_invalidate_any_token() {
+380        let (mut ctx, admin, alice, bob) = setup();
+381
+382        // When alice sets the resolution for the main domain and a subdomain
+383        ctx.set_caller(alice);
+384        set_resolution(&mut ctx, MAIN_DOMAIN, alice);
+385        set_resolution(&mut ctx, SUBDOMAIN, bob);
+386
+387        // Then both resolutions are set
+388        assert_eq!(resolve(&ctx, MAIN_DOMAIN), Some(alice));
+389        assert_eq!(resolve(&ctx, SUBDOMAIN), Some(bob));
+390
+391        // When the admin cleans up alice's token's resolutions
+392        invalidate_with_caller(&mut ctx, TOKEN_NAME, admin);
+393
+394        // Then both resolutions are erased
+395        assert_eq!(resolve(&ctx, MAIN_DOMAIN), None);
+396        assert_eq!(resolve(&ctx, SUBDOMAIN), None);
+397    }
+398
+399    #[test]
+400    fn only_owner_or_admin_can_invalidate() {
+401        let (mut ctx, _, alice, bob) = setup();
+402
+403        // When alice sets the resolution for the main domain and a subdomain
+404        ctx.set_caller(alice);
+405        set_resolution(&mut ctx, MAIN_DOMAIN, alice);
+406        set_resolution(&mut ctx, SUBDOMAIN, bob);
+407
+408        // Then both resolutions are set
+409        assert_eq!(resolve(&ctx, MAIN_DOMAIN), Some(alice));
+410        assert_eq!(resolve(&ctx, SUBDOMAIN), Some(bob));
+411
+412        // When bob tries to clean up alice's token's resolutions
+413        ctx.set_caller(bob);
+414        let result = try_invalidate(&mut ctx, TOKEN_NAME);
+415        // Then the operation fails
+416        assert_eq!(result, Err(ResolverError::UnauthorizedInvalidation.into()));
+417    }
+418
+419    fn setup() -> (TestContext, Address, Address, Address) {
+420        let mut ctx = TestContext::install_and_setup();
+421        let (admin, alice, bob) = (ctx.admin, ctx.alice, ctx.bob);
+422
+423        ctx.with_name_registered(admin, alice, TOKEN_NAME);
+424        (ctx, admin, alice, bob)
+425    }
+426
+427    fn set_resolution(ctx: &mut TestContext, domain: &str, address: Address) {
+428        ctx.default_resolver
+429            .set_resolution(domain.to_string(), Some(address));
+430    }
+431
+432    fn try_set_resolution(ctx: &mut TestContext, domain: &str, address: Address) -> OdraResult<()> {
+433        ctx.default_resolver
+434            .try_set_resolution(domain.to_string(), Some(address))
+435    }
+436
+437    fn set_resolution_with_caller(
+438        ctx: &mut TestContext,
+439        domain: &str,
+440        address: Address,
+441        caller: Address,
+442    ) {
+443        ctx.set_caller(caller);
+444        set_resolution(ctx, domain, address);
+445    }
+446
+447    fn resolve(ctx: &TestContext, domain: &str) -> Option<Address> {
+448        ctx.default_resolver.resolve(domain.to_string())
+449    }
+450
+451    fn resolve_with_caller(
+452        ctx: &mut TestContext,
+453        domain: &str,
+454        caller: Address,
+455    ) -> Option<Address> {
+456        ctx.set_caller(caller);
+457        resolve(ctx, domain)
+458    }
+459
+460    fn invalidate(ctx: &mut TestContext, token_name: &str) {
+461        try_invalidate(ctx, token_name).unwrap();
+462    }
+463
+464    fn invalidate_with_caller(ctx: &mut TestContext, token_name: &str, caller: Address) {
+465        ctx.set_caller(caller);
+466        invalidate(ctx, token_name);
+467    }
+468
+469    fn try_invalidate(ctx: &mut TestContext, token_name: &str) -> OdraResult<()> {
+470        ctx.default_resolver
+471            .try_invalidate_resolutions(generate_token_id(token_name))
+472    }
+473}
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/reverse_resolver.rs.html b/docs/src/casper_name_contracts/contracts/reverse_resolver.rs.html index d041cf5..e02cf79 100644 --- a/docs/src/casper_name_contracts/contracts/reverse_resolver.rs.html +++ b/docs/src/casper_name_contracts/contracts/reverse_resolver.rs.html @@ -1,537 +1,268 @@ -reverse_resolver.rs - source

casper_name_contracts/contracts/
reverse_resolver.rs

-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
use crate::contracts::{
-    name_token::NameTokenContractRef, resolver::ResolverContractRef, token_id::ToTokenId, utils,
-};
-use odra::{prelude::*, ContractRef};
-
-#[odra::odra_error]
-enum Error {
-    InvalidTokenName = 1500,
-    ResolutionForPrimaryNameNotFound = 1501,
-    InvalidResolutionAddress = 1502,
-}
-
-/// Reverse Resolver contract. It resolves primary names to addresses.
-#[odra::module(events = [PrimaryNameChanged], errors = Error)]
-pub struct ReverseResolver {
-    primary_names: Mapping<Address, Option<String>>,
-    name_token: External<NameTokenContractRef>,
-}
-
-#[odra::module]
-impl ReverseResolver {
-    pub fn init(&mut self, name_token: Address) {
-        if !name_token.is_contract() {
-            self.revert(Error::InvalidTokenName);
-        }
-        self.name_token.set(name_token);
-    }
-
-    /// Sets the primary preferred reverse resolution address for the caller.
-    pub fn set_primary_name(&mut self, primary_name: String) {
-        // Load currently set primary name.
-        let caller = self.env().caller();
-        let current_primary_name = self.get_primary_name(&caller);
-
-        match self.existing_resolution(&primary_name) {
-            Some(address) => {
-                if address != caller {
-                    // If the resolution exists but is not for the caller, revert.
-                    self.revert(Error::InvalidResolutionAddress);
-                }
-            }
-            None => {
-                self.revert(Error::ResolutionForPrimaryNameNotFound);
-            }
-        };
-
-        if current_primary_name.as_ref() == Some(&primary_name) {
-            // If the primary name is the same, do nothing.
-            return;
-        }
-
-        // Update primary name.
-        self.primary_names.set(&caller, Some(primary_name.clone()));
-
-        // Emit event.
-        self.env().emit_event(PrimaryNameChanged {
-            address: caller,
-            old_primary_name: current_primary_name,
-            new_primary_name: Some(primary_name),
-        });
-    }
-
-    /// Returns the primary name for the address.
-    pub fn get_primary_name(&self, address: &Address) -> Option<String> {
-        let primary_name = self.primary_names.get(address).flatten()?;
-        // Check if the primary name resolves to the given address.
-        // If a resolver was cleaned up, it might not resolve anymore.
-        let resolved_address = self.existing_resolution(&primary_name)?;
-        if resolved_address == *address {
-            Some(primary_name)
-        } else {
-            None
-        }
-    }
-
-    fn existing_resolution(&self, name: &str) -> Option<Address> {
-        let token_name = utils::extract_token_name(name)?;
-        let token_id = self.token_id(token_name);
-        let resolver_address = self.name_token.resolver(token_id)?;
-        ResolverContractRef::new(self.env(), resolver_address).resolve(name.to_owned())
-    }
-}
-
-/// Event emitted when the primary name of an address changes.
-#[odra::event]
-pub struct PrimaryNameChanged {
-    pub address: Address,
-    pub old_primary_name: Option<String>,
-    pub new_primary_name: Option<String>,
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use crate::test_context::{self, TestContext};
-    use odra::host::Deployer;
-
-    const TOKEN_TEST: &str = "test";
-    const TOKEN_TEST2: &str = "test2";
-    const DOMAIN_TEST: &str = "test.cspr";
-    const DOMAIN_TEST2: &str = "test2.cspr";
-
-    #[test]
-    fn test_set_primary_name() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, user) = (ctx.admin, ctx.alice);
-
-        let mut reverse_resolver = ReverseResolver::deploy(
-            &ctx.env,
-            ReverseResolverInitArgs {
-                name_token: ctx.token.address(),
-            },
-        );
-
-        ctx.with_name_registered(admin, user, TOKEN_TEST);
-        ctx.with_name_registered(admin, user, TOKEN_TEST2);
-
-        ctx.set_caller(user);
-        ctx.default_resolver
-            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
-        ctx.default_resolver
-            .set_resolution(DOMAIN_TEST2.to_string(), Some(user));
-
-        // It should have no primary name.
-        assert_eq!(reverse_resolver.get_primary_name(&user), None);
-
-        // Set primary name.
-        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
-
-        // It should have the primary name.
-        assert_eq!(
-            reverse_resolver.get_primary_name(&user),
-            Some(DOMAIN_TEST.to_string())
-        );
-
-        // Set new primary name.
-        reverse_resolver.set_primary_name(DOMAIN_TEST2.to_string());
-
-        // It should have the new primary name.
-        assert_eq!(
-            reverse_resolver.get_primary_name(&user),
-            Some(DOMAIN_TEST2.to_string())
-        );
-    }
-
-    #[test]
-    fn test_set_same_primary_name() {
-        let mut ctx = TestContext::install_and_setup();
-        let (admin, user) = (ctx.admin, ctx.alice);
-
-        let mut reverse_resolver = ReverseResolver::deploy(
-            &ctx.env,
-            ReverseResolverInitArgs {
-                name_token: ctx.token.address(),
-            },
-        );
-
-        ctx.with_name_registered(admin, user, TOKEN_TEST);
-        ctx.with_name_registered(admin, user, TOKEN_TEST2);
-
-        ctx.set_caller(user);
-        ctx.default_resolver
-            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
-        ctx.default_resolver
-            .set_resolution(DOMAIN_TEST2.to_string(), Some(user));
-
-        // Set primary name.
-        ctx.set_caller(user);
-        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
-
-        // Set a different primary name.
-        ctx.set_caller(user);
-        reverse_resolver.set_primary_name(DOMAIN_TEST2.to_string());
-
-        // Set the same primary name again.
-        ctx.set_caller(user);
-        reverse_resolver.set_primary_name(DOMAIN_TEST2.to_string());
-
-        // The contract should not emit an event for the same primary name.
-        assert_eq!(ctx.events_count(&reverse_resolver), 2);
-    }
-
-    #[test]
-    fn test_set_name_assigned_to_someone_else() {
-        let (mut ctx, mut reverse_resolver) = setup();
-        let (admin, user) = (ctx.admin, ctx.alice);
-
-        ctx.with_name_registered(admin, user, TOKEN_TEST);
-
-        ctx.set_caller(user);
-        ctx.default_resolver
-            .set_resolution(DOMAIN_TEST.to_string(), Some(admin));
-
-        // Set primary name.
-        let result = reverse_resolver.try_set_primary_name(DOMAIN_TEST.to_string());
-        assert_eq!(result.unwrap_err(), Error::InvalidResolutionAddress.into());
-    }
-
-    #[test]
-    fn test_set_not_existing_name() {
-        let (mut ctx, mut reverse_resolver) = setup();
-        let (admin, user) = (ctx.admin, ctx.alice);
-
-        ctx.with_name_registered(admin, user, TOKEN_TEST);
-
-        // Set primary name.
-        ctx.set_caller(user);
-        let result = reverse_resolver.try_set_primary_name(DOMAIN_TEST.to_string());
-        assert_eq!(
-            result.unwrap_err(),
-            Error::ResolutionForPrimaryNameNotFound.into()
-        );
-    }
-
-    #[test]
-    fn test_get_primary_name() {
-        let (mut ctx, mut reverse_resolver) = setup();
-        let (admin, user) = (ctx.admin, ctx.alice);
-        ctx.with_name_registered(admin, user, TOKEN_TEST);
-
-        ctx.set_caller(user);
-        ctx.default_resolver
-            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
-
-        assert_eq!(reverse_resolver.get_primary_name(&user), None);
-
-        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
-        assert_eq!(
-            reverse_resolver.get_primary_name(&user),
-            Some(DOMAIN_TEST.to_string())
-        );
-    }
-
-    #[test]
-    fn test_get_primary_name_invalidated_by_resolver() {
-        let (mut ctx, mut reverse_resolver) = setup();
-        let (admin, user) = (ctx.admin, ctx.alice);
-        ctx.with_name_registered(admin, user, TOKEN_TEST);
-
-        ctx.set_caller(user);
-        ctx.default_resolver
-            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
-
-        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
-        assert_eq!(
-            reverse_resolver.get_primary_name(&user),
-            Some(DOMAIN_TEST.to_string())
-        );
-
-        // Simulate a resolver cleanup by removing the resolution.
-        ctx.default_resolver
-            .invalidate_resolutions(test_context::generate_token_id(TOKEN_TEST));
-
-        // The primary name should no longer be valid.
-        assert_eq!(reverse_resolver.get_primary_name(&user), None);
-    }
-
-    fn setup() -> (TestContext, ReverseResolverHostRef) {
-        let ctx = TestContext::install_and_setup();
-        let reverse_resolver = ReverseResolver::deploy(
-            &ctx.env,
-            ReverseResolverInitArgs {
-                name_token: ctx.token.address(),
-            },
-        );
-        (ctx, reverse_resolver)
-    }
-}
-
\ No newline at end of file +reverse_resolver.rs - source

casper_name_contracts/contracts/
reverse_resolver.rs

1use crate::contracts::{
+2    name_token::NameTokenContractRef, resolver::ResolverContractRef, token_id::ToTokenId, utils,
+3};
+4use odra::{prelude::*, ContractRef};
+5
+6#[odra::odra_error]
+7enum Error {
+8    InvalidTokenName = 1500,
+9    ResolutionForPrimaryNameNotFound = 1501,
+10    InvalidResolutionAddress = 1502,
+11}
+12
+13/// Reverse Resolver contract. It resolves primary names to addresses.
+14#[odra::module(events = [PrimaryNameChanged], errors = Error)]
+15pub struct ReverseResolver {
+16    primary_names: Mapping<Address, Option<String>>,
+17    name_token: External<NameTokenContractRef>,
+18}
+19
+20#[odra::module]
+21impl ReverseResolver {
+22    pub fn init(&mut self, name_token: Address) {
+23        if !name_token.is_contract() {
+24            self.revert(Error::InvalidTokenName);
+25        }
+26        self.name_token.set(name_token);
+27    }
+28
+29    /// Sets the primary preferred reverse resolution address for the caller.
+30    pub fn set_primary_name(&mut self, primary_name: String) {
+31        // Load currently set primary name.
+32        let caller = self.env().caller();
+33        let current_primary_name = self.get_primary_name(&caller);
+34
+35        match self.existing_resolution(&primary_name) {
+36            Some(address) => {
+37                if address != caller {
+38                    // If the resolution exists but is not for the caller, revert.
+39                    self.revert(Error::InvalidResolutionAddress);
+40                }
+41            }
+42            None => {
+43                self.revert(Error::ResolutionForPrimaryNameNotFound);
+44            }
+45        };
+46
+47        if current_primary_name.as_ref() == Some(&primary_name) {
+48            // If the primary name is the same, do nothing.
+49            return;
+50        }
+51
+52        // Update primary name.
+53        self.primary_names.set(&caller, Some(primary_name.clone()));
+54
+55        // Emit event.
+56        self.env().emit_event(PrimaryNameChanged {
+57            address: caller,
+58            old_primary_name: current_primary_name,
+59            new_primary_name: Some(primary_name),
+60        });
+61    }
+62
+63    /// Returns the primary name for the address.
+64    pub fn get_primary_name(&self, address: &Address) -> Option<String> {
+65        let primary_name = self.primary_names.get(address).flatten()?;
+66        // Check if the primary name resolves to the given address.
+67        // If a resolver was cleaned up, it might not resolve anymore.
+68        let resolved_address = self.existing_resolution(&primary_name)?;
+69        if resolved_address == *address {
+70            Some(primary_name)
+71        } else {
+72            None
+73        }
+74    }
+75
+76    fn existing_resolution(&self, name: &str) -> Option<Address> {
+77        let token_name = utils::extract_token_name(name)?;
+78        let token_id = self.token_id(token_name);
+79        let resolver_address = self.name_token.resolver(token_id)?;
+80        ResolverContractRef::new(self.env(), resolver_address).resolve(name.to_owned())
+81    }
+82}
+83
+84/// Event emitted when the primary name of an address changes.
+85#[odra::event]
+86pub struct PrimaryNameChanged {
+87    pub address: Address,
+88    pub old_primary_name: Option<String>,
+89    pub new_primary_name: Option<String>,
+90}
+91
+92#[cfg(test)]
+93mod tests {
+94    use super::*;
+95    use crate::test_context::{self, TestContext};
+96    use odra::host::Deployer;
+97
+98    const TOKEN_TEST: &str = "test";
+99    const TOKEN_TEST2: &str = "test2";
+100    const DOMAIN_TEST: &str = "test.cspr";
+101    const DOMAIN_TEST2: &str = "test2.cspr";
+102
+103    #[test]
+104    fn test_set_primary_name() {
+105        let mut ctx = TestContext::install_and_setup();
+106        let (admin, user) = (ctx.admin, ctx.alice);
+107
+108        let mut reverse_resolver = ReverseResolver::deploy(
+109            &ctx.env,
+110            ReverseResolverInitArgs {
+111                name_token: ctx.token.address(),
+112            },
+113        );
+114
+115        ctx.with_name_registered(admin, user, TOKEN_TEST);
+116        ctx.with_name_registered(admin, user, TOKEN_TEST2);
+117
+118        ctx.set_caller(user);
+119        ctx.default_resolver
+120            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
+121        ctx.default_resolver
+122            .set_resolution(DOMAIN_TEST2.to_string(), Some(user));
+123
+124        // It should have no primary name.
+125        assert_eq!(reverse_resolver.get_primary_name(&user), None);
+126
+127        // Set primary name.
+128        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
+129
+130        // It should have the primary name.
+131        assert_eq!(
+132            reverse_resolver.get_primary_name(&user),
+133            Some(DOMAIN_TEST.to_string())
+134        );
+135
+136        // Set new primary name.
+137        reverse_resolver.set_primary_name(DOMAIN_TEST2.to_string());
+138
+139        // It should have the new primary name.
+140        assert_eq!(
+141            reverse_resolver.get_primary_name(&user),
+142            Some(DOMAIN_TEST2.to_string())
+143        );
+144    }
+145
+146    #[test]
+147    fn test_set_same_primary_name() {
+148        let mut ctx = TestContext::install_and_setup();
+149        let (admin, user) = (ctx.admin, ctx.alice);
+150
+151        let mut reverse_resolver = ReverseResolver::deploy(
+152            &ctx.env,
+153            ReverseResolverInitArgs {
+154                name_token: ctx.token.address(),
+155            },
+156        );
+157
+158        ctx.with_name_registered(admin, user, TOKEN_TEST);
+159        ctx.with_name_registered(admin, user, TOKEN_TEST2);
+160
+161        ctx.set_caller(user);
+162        ctx.default_resolver
+163            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
+164        ctx.default_resolver
+165            .set_resolution(DOMAIN_TEST2.to_string(), Some(user));
+166
+167        // Set primary name.
+168        ctx.set_caller(user);
+169        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
+170
+171        // Set a different primary name.
+172        ctx.set_caller(user);
+173        reverse_resolver.set_primary_name(DOMAIN_TEST2.to_string());
+174
+175        // Set the same primary name again.
+176        ctx.set_caller(user);
+177        reverse_resolver.set_primary_name(DOMAIN_TEST2.to_string());
+178
+179        // The contract should not emit an event for the same primary name.
+180        assert_eq!(ctx.events_count(&reverse_resolver), 2);
+181    }
+182
+183    #[test]
+184    fn test_set_name_assigned_to_someone_else() {
+185        let (mut ctx, mut reverse_resolver) = setup();
+186        let (admin, user) = (ctx.admin, ctx.alice);
+187
+188        ctx.with_name_registered(admin, user, TOKEN_TEST);
+189
+190        ctx.set_caller(user);
+191        ctx.default_resolver
+192            .set_resolution(DOMAIN_TEST.to_string(), Some(admin));
+193
+194        // Set primary name.
+195        let result = reverse_resolver.try_set_primary_name(DOMAIN_TEST.to_string());
+196        assert_eq!(result.unwrap_err(), Error::InvalidResolutionAddress.into());
+197    }
+198
+199    #[test]
+200    fn test_set_not_existing_name() {
+201        let (mut ctx, mut reverse_resolver) = setup();
+202        let (admin, user) = (ctx.admin, ctx.alice);
+203
+204        ctx.with_name_registered(admin, user, TOKEN_TEST);
+205
+206        // Set primary name.
+207        ctx.set_caller(user);
+208        let result = reverse_resolver.try_set_primary_name(DOMAIN_TEST.to_string());
+209        assert_eq!(
+210            result.unwrap_err(),
+211            Error::ResolutionForPrimaryNameNotFound.into()
+212        );
+213    }
+214
+215    #[test]
+216    fn test_get_primary_name() {
+217        let (mut ctx, mut reverse_resolver) = setup();
+218        let (admin, user) = (ctx.admin, ctx.alice);
+219        ctx.with_name_registered(admin, user, TOKEN_TEST);
+220
+221        ctx.set_caller(user);
+222        ctx.default_resolver
+223            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
+224
+225        assert_eq!(reverse_resolver.get_primary_name(&user), None);
+226
+227        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
+228        assert_eq!(
+229            reverse_resolver.get_primary_name(&user),
+230            Some(DOMAIN_TEST.to_string())
+231        );
+232    }
+233
+234    #[test]
+235    fn test_get_primary_name_invalidated_by_resolver() {
+236        let (mut ctx, mut reverse_resolver) = setup();
+237        let (admin, user) = (ctx.admin, ctx.alice);
+238        ctx.with_name_registered(admin, user, TOKEN_TEST);
+239
+240        ctx.set_caller(user);
+241        ctx.default_resolver
+242            .set_resolution(DOMAIN_TEST.to_string(), Some(user));
+243
+244        reverse_resolver.set_primary_name(DOMAIN_TEST.to_string());
+245        assert_eq!(
+246            reverse_resolver.get_primary_name(&user),
+247            Some(DOMAIN_TEST.to_string())
+248        );
+249
+250        // Simulate a resolver cleanup by removing the resolution.
+251        ctx.default_resolver
+252            .invalidate_resolutions(test_context::generate_token_id(TOKEN_TEST));
+253
+254        // The primary name should no longer be valid.
+255        assert_eq!(reverse_resolver.get_primary_name(&user), None);
+256    }
+257
+258    fn setup() -> (TestContext, ReverseResolverHostRef) {
+259        let ctx = TestContext::install_and_setup();
+260        let reverse_resolver = ReverseResolver::deploy(
+261            &ctx.env,
+262            ReverseResolverInitArgs {
+263                name_token: ctx.token.address(),
+264            },
+265        );
+266        (ctx, reverse_resolver)
+267    }
+268}
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/token_id.rs.html b/docs/src/casper_name_contracts/contracts/token_id.rs.html index 471c292..2386c70 100644 --- a/docs/src/casper_name_contracts/contracts/token_id.rs.html +++ b/docs/src/casper_name_contracts/contracts/token_id.rs.html @@ -1,33 +1,16 @@ -token_id.rs - source

casper_name_contracts/contracts/
token_id.rs

-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
use odra::{casper_types::U256, prelude::*};
-
-pub trait ToTokenId {
-    /// Converts the label to a token ID.
-    fn token_id(&self, label: String) -> U256;
-}
-
-impl<T> ToTokenId for T
-where
-    T: Module,
-{
-    fn token_id(&self, label: String) -> U256 {
-        let hash = self.env().hash(label);
-        U256::from(hash)
-    }
-}
-
\ No newline at end of file +token_id.rs - source

casper_name_contracts/contracts/
token_id.rs

1use odra::{casper_types::U256, prelude::*};
+2
+3pub trait ToTokenId {
+4    /// Converts the label to a token ID.
+5    fn token_id(&self, label: String) -> U256;
+6}
+7
+8impl<T> ToTokenId for T
+9where
+10    T: Module,
+11{
+12    fn token_id(&self, label: String) -> U256 {
+13        let hash = self.env().hash(label);
+14        U256::from(hash)
+15    }
+16}
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/contracts/utils.rs.html b/docs/src/casper_name_contracts/contracts/utils.rs.html index ee01d7c..00ae97c 100644 --- a/docs/src/casper_name_contracts/contracts/utils.rs.html +++ b/docs/src/casper_name_contracts/contracts/utils.rs.html @@ -1,289 +1,144 @@ -utils.rs - source

casper_name_contracts/contracts/
utils.rs

-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
use odra::prelude::*;
-
-const CSPR_DOMAIN: &str = ".cspr";
-const SUBDOMAIN_SEPARATOR: &str = ".";
-
-/// Extract the token name from a full domain.
-pub fn extract_token_name(full_domain: &str) -> Option<String> {
-    if full_domain.ends_with(CSPR_DOMAIN) {
-        let token_name = full_domain.trim_end_matches(CSPR_DOMAIN);
-        token_name.split('.').last().map(|s| s.to_string())
-    } else {
-        None
-    }
-}
-
-/// Return `true` if byte `b` is ASCII letter or digit.
-#[inline(always)]
-const fn is_alnum(b: u8) -> bool {
-    (b >= b'0' && b <= b'9') || (b >= b'a' && b <= b'z') || (b >= b'A' && b <= b'Z')
-}
-
-/// Validate a single DNS label under RFC 952/1123 (LDH rule).
-///
-/// * **length** 1–63 bytes
-/// * **characters** ASCII letters, digits, or `-`
-/// * **first/last** must be alphanumeric
-///
-/// Returns `true` for valid labels.
-#[inline]
-fn is_valid_dns_label(label: &str) -> bool {
-    let bytes = label.as_bytes();
-    let len = bytes.len();
-
-    if len == 0 || len > 63 {
-        return false;
-    }
-
-    // first & last char must be alnum
-    if !is_alnum(bytes[0]) || !is_alnum(bytes[len - 1]) {
-        return false;
-    }
-
-    // interior chars: alnum or hyphen
-    let mut i = 1;
-    while i < len - 1 {
-        let b = bytes[i];
-        if !is_alnum(b) && b != b'-' {
-            return false;
-        }
-        i += 1;
-    }
-    true
-}
-
-/// Validate a full domain with subdomains.
-/// The domain must end with `.cspr` and each subdomain must be a valid DNS label.
-pub fn is_domain_valid(full_domain: &str) -> bool {
-    if full_domain.ends_with(CSPR_DOMAIN) {
-        let token_name = full_domain.trim_end_matches(CSPR_DOMAIN);
-        token_name
-            .split(SUBDOMAIN_SEPARATOR)
-            .map(is_valid_dns_label)
-            .all(|valid| valid)
-    } else {
-        false
-    }
-}
-
-/// Validate a label for use in a Casper token name.
-/// A valid label must be a valid DNS label, not equal to "cspr", and
-/// must not contain any subdomains (i.e., no `.` character).
-pub fn is_label_valid(label: &str) -> bool {
-    is_valid_dns_label(label) && label != "cspr" && !label.contains('.')
-}
-
-#[cfg(test)]
-mod t {
-    #[test]
-    fn test_extract_token_name() {
-        let full_domain = "odra.cspr";
-        let token_name = super::extract_token_name(full_domain).unwrap();
-        assert_eq!(token_name, "odra");
-
-        let full_domain = "aaa.odra.cspr";
-        let token_name = super::extract_token_name(full_domain).unwrap();
-        assert_eq!(token_name, "odra");
-
-        let full_domain = "ss.aaa.odra.cspr";
-        let token_name = super::extract_token_name(full_domain).unwrap();
-        assert_eq!(token_name, "odra");
-
-        let full_domain = "aaa.odra.csp";
-        let token_name = super::extract_token_name(full_domain);
-        assert_eq!(token_name, None);
-    }
-
-    #[test]
-    fn test_is_valid_dns_label() {
-        assert!(super::is_valid_dns_label("valid-label"));
-        assert!(!super::is_valid_dns_label("-invalid-start"));
-        assert!(!super::is_valid_dns_label("invalid-end-"));
-        assert!(!super::is_valid_dns_label("invalid_char@"));
-        assert!(!super::is_valid_dns_label(
-            "too-long-label-abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
-        ));
-        assert!(super::is_valid_dns_label("valid123"));
-    }
-
-    #[test]
-    fn test_is_domain_valid() {
-        let full_domain = "odra.cspr";
-        assert!(super::is_domain_valid(full_domain));
-
-        let full_domain = "aaa.odra.cspr";
-        assert!(super::is_domain_valid(full_domain));
-
-        let full_domain = "ss.aaa.odra.cspr";
-        assert!(super::is_domain_valid(full_domain));
-
-        let full_domain = "invalid-label-.cspr";
-        assert!(!super::is_domain_valid(full_domain));
-
-        let full_domain = "invalid-label@.cspr";
-        assert!(!super::is_domain_valid(full_domain));
-
-        let full_domain =
-            "too-long-label-abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz.cspr";
-        assert!(!super::is_domain_valid(full_domain));
-
-        let full_domain = "valid123.cspr";
-        assert!(super::is_domain_valid(full_domain));
-    }
-
-    #[test]
-    fn test_is_label_valid() {
-        assert!(super::is_label_valid("valid-label"));
-        assert!(!super::is_label_valid("-invalid-start"));
-        assert!(!super::is_label_valid("invalid-end-"));
-        assert!(!super::is_label_valid("invalid_char@"));
-        assert!(!super::is_label_valid("cspr"));
-        assert!(!super::is_label_valid("invalid.label"));
-        assert!(super::is_label_valid("valid123"));
-    }
-}
-
\ No newline at end of file +utils.rs - source

casper_name_contracts/contracts/
utils.rs

1use odra::prelude::*;
+2
+3const CSPR_DOMAIN: &str = ".cspr";
+4const SUBDOMAIN_SEPARATOR: &str = ".";
+5
+6/// Extract the token name from a full domain.
+7pub fn extract_token_name(full_domain: &str) -> Option<String> {
+8    if full_domain.ends_with(CSPR_DOMAIN) {
+9        let token_name = full_domain.trim_end_matches(CSPR_DOMAIN);
+10        token_name.split('.').last().map(|s| s.to_string())
+11    } else {
+12        None
+13    }
+14}
+15
+16/// Return `true` if byte `b` is ASCII letter or digit.
+17#[inline(always)]
+18const fn is_alnum(b: u8) -> bool {
+19    (b >= b'0' && b <= b'9') || (b >= b'a' && b <= b'z') || (b >= b'A' && b <= b'Z')
+20}
+21
+22/// Validate a single DNS label under RFC 952/1123 (LDH rule).
+23///
+24/// * **length** 1–63 bytes
+25/// * **characters** ASCII letters, digits, or `-`
+26/// * **first/last** must be alphanumeric
+27///
+28/// Returns `true` for valid labels.
+29#[inline]
+30fn is_valid_dns_label(label: &str) -> bool {
+31    let bytes = label.as_bytes();
+32    let len = bytes.len();
+33
+34    if len == 0 || len > 63 {
+35        return false;
+36    }
+37
+38    // first & last char must be alnum
+39    if !is_alnum(bytes[0]) || !is_alnum(bytes[len - 1]) {
+40        return false;
+41    }
+42
+43    // interior chars: alnum or hyphen
+44    let mut i = 1;
+45    while i < len - 1 {
+46        let b = bytes[i];
+47        if !is_alnum(b) && b != b'-' {
+48            return false;
+49        }
+50        i += 1;
+51    }
+52    true
+53}
+54
+55/// Validate a full domain with subdomains.
+56/// The domain must end with `.cspr` and each subdomain must be a valid DNS label.
+57pub fn is_domain_valid(full_domain: &str) -> bool {
+58    if full_domain.ends_with(CSPR_DOMAIN) {
+59        let token_name = full_domain.trim_end_matches(CSPR_DOMAIN);
+60        token_name
+61            .split(SUBDOMAIN_SEPARATOR)
+62            .map(is_valid_dns_label)
+63            .all(|valid| valid)
+64    } else {
+65        false
+66    }
+67}
+68
+69/// Validate a label for use in a Casper token name.
+70/// A valid label must be a valid DNS label, not equal to "cspr", and
+71/// must not contain any subdomains (i.e., no `.` character).
+72pub fn is_label_valid(label: &str) -> bool {
+73    is_valid_dns_label(label) && label != "cspr" && !label.contains('.')
+74}
+75
+76#[cfg(test)]
+77mod t {
+78    #[test]
+79    fn test_extract_token_name() {
+80        let full_domain = "odra.cspr";
+81        let token_name = super::extract_token_name(full_domain).unwrap();
+82        assert_eq!(token_name, "odra");
+83
+84        let full_domain = "aaa.odra.cspr";
+85        let token_name = super::extract_token_name(full_domain).unwrap();
+86        assert_eq!(token_name, "odra");
+87
+88        let full_domain = "ss.aaa.odra.cspr";
+89        let token_name = super::extract_token_name(full_domain).unwrap();
+90        assert_eq!(token_name, "odra");
+91
+92        let full_domain = "aaa.odra.csp";
+93        let token_name = super::extract_token_name(full_domain);
+94        assert_eq!(token_name, None);
+95    }
+96
+97    #[test]
+98    fn test_is_valid_dns_label() {
+99        assert!(super::is_valid_dns_label("valid-label"));
+100        assert!(!super::is_valid_dns_label("-invalid-start"));
+101        assert!(!super::is_valid_dns_label("invalid-end-"));
+102        assert!(!super::is_valid_dns_label("invalid_char@"));
+103        assert!(!super::is_valid_dns_label(
+104            "too-long-label-abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
+105        ));
+106        assert!(super::is_valid_dns_label("valid123"));
+107    }
+108
+109    #[test]
+110    fn test_is_domain_valid() {
+111        let full_domain = "odra.cspr";
+112        assert!(super::is_domain_valid(full_domain));
+113
+114        let full_domain = "aaa.odra.cspr";
+115        assert!(super::is_domain_valid(full_domain));
+116
+117        let full_domain = "ss.aaa.odra.cspr";
+118        assert!(super::is_domain_valid(full_domain));
+119
+120        let full_domain = "invalid-label-.cspr";
+121        assert!(!super::is_domain_valid(full_domain));
+122
+123        let full_domain = "invalid-label@.cspr";
+124        assert!(!super::is_domain_valid(full_domain));
+125
+126        let full_domain =
+127            "too-long-label-abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz.cspr";
+128        assert!(!super::is_domain_valid(full_domain));
+129
+130        let full_domain = "valid123.cspr";
+131        assert!(super::is_domain_valid(full_domain));
+132    }
+133
+134    #[test]
+135    fn test_is_label_valid() {
+136        assert!(super::is_label_valid("valid-label"));
+137        assert!(!super::is_label_valid("-invalid-start"));
+138        assert!(!super::is_label_valid("invalid-end-"));
+139        assert!(!super::is_label_valid("invalid_char@"));
+140        assert!(!super::is_label_valid("cspr"));
+141        assert!(!super::is_label_valid("invalid.label"));
+142        assert!(super::is_label_valid("valid123"));
+143    }
+144}
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/data_structures.rs.html b/docs/src/casper_name_contracts/data_structures.rs.html index 54d5e1e..012a0cc 100644 --- a/docs/src/casper_name_contracts/data_structures.rs.html +++ b/docs/src/casper_name_contracts/data_structures.rs.html @@ -1,771 +1,385 @@ -data_structures.rs - source

casper_name_contracts/
data_structures.rs

-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
use odra::{
-    casper_types::{U256, U512},
-    prelude::*,
-};
-use serde::{Deserialize, Serialize};
-
-/// Errors that can occur while working with name tokens.
-#[odra::odra_error]
-#[derive(Debug)]
-pub enum NameTokenError {
-    EmptyTLD = 1001,
-    TLDNotSupported = 1002,
-    PastExpirationDate = 1003,
-    EmptyLabel = 1004,
-    SLDDoesNotExist = 1005,
-    SerializationError = 1006,
-    DeserializationError = 1007,
-    InvalidMetadata = 1008,
-}
-
-/// Metadata associated with a name token.
-#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)]
-pub struct NameTokenMetadata {
-    name: String,
-    expiration: u64,
-    resolver: Option<Address>,
-    asset_uri: String,
-}
-
-impl NameTokenMetadata {
-    pub fn with_resolver(name: &str, expiration: u64, asset_uri: &str, resolver: Address) -> Self {
-        Self {
-            name: String::from(name),
-            expiration,
-            resolver: Some(resolver),
-            asset_uri: String::from(asset_uri),
-        }
-    }
-
-    pub fn with_no_resolver(name: &str, expiration: u64, asset_uri: &str) -> Self {
-        Self {
-            name: String::from(name),
-            expiration,
-            resolver: None,
-            asset_uri: String::from(asset_uri),
-        }
-    }
-
-    pub fn set_resolver(&mut self, resolver: Address) {
-        self.resolver = Some(resolver);
-    }
-
-    pub fn resolver(&self) -> OdraResult<Option<Address>> {
-        Ok(self.resolver)
-    }
-
-    pub fn clear_resolver(&mut self) {
-        self.resolver = None;
-    }
-
-    pub fn json(&self) -> String {
-        serde_json_wasm::to_string(&self).unwrap()
-    }
-
-    pub fn to_vec(&self) -> Vec<(String, String)> {
-        let mut vec = Vec::new();
-        vec.push(("asset_uri".to_string(), self.asset_uri.clone()));
-        vec.push(("expiration".to_string(), self.expiration.to_string()));
-        vec.push(("name".to_string(), self.name.clone()));
-        if let Some(resolver) = &self.resolver {
-            vec.push(("resolver".to_string(), resolver.to_string()));
-        }
-        vec
-    }
-
-    pub fn expiration(&self) -> u64 {
-        self.expiration
-    }
-
-    pub fn set_expiration(&mut self, expiration: u64) {
-        self.expiration = expiration;
-    }
-}
-
-impl TryFrom<String> for NameTokenMetadata {
-    type Error = NameTokenError;
-
-    fn try_from(value: String) -> Result<Self, Self::Error> {
-        serde_json_wasm::from_str(&value).map_err(|_| NameTokenError::DeserializationError)
-    }
-}
-
-impl TryFrom<Vec<(String, String)>> for NameTokenMetadata {
-    type Error = NameTokenError;
-
-    fn try_from(value: Vec<(String, String)>) -> Result<Self, Self::Error> {
-        let name = value
-            .iter()
-            .find(|(key, _)| key == "name")
-            .ok_or(NameTokenError::DeserializationError)?
-            .1
-            .clone();
-
-        let expiration = value
-            .iter()
-            .find(|(key, _)| key == "expiration")
-            .ok_or(NameTokenError::DeserializationError)?
-            .1
-            .parse()
-            .map_err(|_| NameTokenError::DeserializationError)?;
-
-        let resolver = value
-            .iter()
-            .find(|(key, _)| key == "resolver")
-            .cloned()
-            .map(|(_, value)| {
-                Address::from_str(&value).map_err(|_| NameTokenError::DeserializationError)
-            })
-            .transpose()?;
-
-        let asset_uri = value
-            .iter()
-            .find(|(key, _)| key == "asset_uri")
-            .map(|(_, value)| value.clone())
-            .unwrap_or_default();
-
-        Ok(NameTokenMetadata {
-            name,
-            expiration,
-            resolver,
-            asset_uri,
-        })
-    }
-}
-
-/// Information about a payment.
-#[odra::odra_type]
-pub struct PaymentInfo {
-    pub buyer: Address,
-    pub payment_id: String,
-    pub amount: U512,
-}
-
-/// List of [NameMintInfo] structs and the expiration time of the voucher.
-#[odra::odra_type]
-pub struct TokenizationVoucher {
-    pub names: Vec<NameMintInfo>,
-    pub voucher_expiration: u64,
-}
-
-impl TokenizationVoucher {
-    pub fn new(names: Vec<NameMintInfo>, voucher_expiration: u64) -> Self {
-        Self {
-            names,
-            voucher_expiration,
-        }
-    }
-}
-
-/// Information about a payment and a list of [NameMintInfo] structs.
-#[odra::odra_type]
-pub struct PaymentVoucher {
-    pub payment: PaymentInfo,
-    pub names: Vec<NameMintInfo>,
-    pub voucher_expiration: u64,
-}
-
-impl PaymentVoucher {
-    pub fn new(
-        amount: U512,
-        payment_id: &str,
-        buyer: Address,
-        names: Vec<NameMintInfo>,
-        voucher_expiration: u64,
-    ) -> Self {
-        Self {
-            payment: PaymentInfo {
-                buyer,
-                payment_id: String::from(payment_id),
-                amount,
-            },
-            names,
-            voucher_expiration,
-        }
-    }
-}
-
-impl From<PaymentVoucher> for TokenizationVoucher {
-    fn from(voucher: PaymentVoucher) -> Self {
-        Self {
-            names: voucher.names,
-            voucher_expiration: voucher.voucher_expiration,
-        }
-    }
-}
-
-/// Information about a payment and a list of [NameTransferInfo] structs.
-#[odra::odra_type]
-pub struct SecondarySaleVoucher {
-    pub payment: PaymentInfo,
-    pub names: Vec<NameTransferInfo>,
-    pub voucher_expiration: u64,
-}
-
-/// Pair of a label and owner address.
-#[odra::odra_type]
-pub struct NameTransferInfo {
-    pub label: String,
-    pub owner: Address,
-}
-
-/// Basic minting information for a name token.
-#[odra::odra_type]
-pub struct NameMintInfo {
-    pub label: String,
-    pub owner: Address,
-    pub token_expiration: u64,
-    pub asset_uri: String,
-}
-
-impl NameMintInfo {
-    pub fn new(label: &str, owner: Address, token_expiration: u64, asset_uri: &str) -> Self {
-        Self {
-            label: String::from(label),
-            owner,
-            token_expiration,
-            asset_uri: String::from(asset_uri),
-        }
-    }
-}
-
-/// Renewal information with new expiration time.
-#[odra::odra_type]
-pub struct TokenRenewalInfo {
-    pub token_id: U256,
-    pub token_expiration: u64,
-}
-
-impl TokenRenewalInfo {
-    pub fn new(token_id: U256, token_expiration: u64) -> Self {
-        Self {
-            token_id,
-            token_expiration,
-        }
-    }
-}
-
-/// Voucher for renewing multiple name tokens, plus payment information.
-#[odra::odra_type]
-pub struct RenewalPaymentVoucher {
-    pub payment: PaymentInfo,
-    pub tokens: Vec<TokenRenewalInfo>,
-    pub voucher_expiration: u64,
-}
-
-impl RenewalPaymentVoucher {
-    pub fn new(
-        amount: U512,
-        payment_id: &str,
-        buyer: Address,
-        tokens: Vec<TokenRenewalInfo>,
-        voucher_expiration: u64,
-    ) -> Self {
-        Self {
-            payment: PaymentInfo {
-                buyer,
-                payment_id: String::from(payment_id),
-                amount,
-            },
-            tokens,
-            voucher_expiration,
-        }
-    }
-}
-
-/// Voucher for renewing multiple name tokens.
-#[odra::odra_type]
-pub struct RenewalVoucher {
-    pub tokens: Vec<TokenRenewalInfo>,
-    pub voucher_expiration: u64,
-}
-
-impl RenewalVoucher {
-    pub fn new(tokens: Vec<TokenRenewalInfo>, voucher_expiration: u64) -> Self {
-        Self {
-            tokens,
-            voucher_expiration,
-        }
-    }
-}
-
-impl From<RenewalPaymentVoucher> for RenewalVoucher {
-    fn from(voucher: RenewalPaymentVoucher) -> Self {
-        Self {
-            tokens: voucher.tokens,
-            voucher_expiration: voucher.voucher_expiration,
-        }
-    }
-}
-
-pub trait Payment {
-    fn payment_info(&self) -> &PaymentInfo;
-}
-
-impl Payment for PaymentVoucher {
-    fn payment_info(&self) -> &PaymentInfo {
-        &self.payment
-    }
-}
-
-impl Payment for RenewalPaymentVoucher {
-    fn payment_info(&self) -> &PaymentInfo {
-        &self.payment
-    }
-}
-
-impl Payment for SecondarySaleVoucher {
-    fn payment_info(&self) -> &PaymentInfo {
-        &self.payment
-    }
-}
-
-pub trait ExpirableVoucher {
-    fn expiration_time(&self) -> u64;
-}
-
-impl ExpirableVoucher for TokenizationVoucher {
-    fn expiration_time(&self) -> u64 {
-        self.voucher_expiration
-    }
-}
-
-impl ExpirableVoucher for RenewalVoucher {
-    fn expiration_time(&self) -> u64 {
-        self.voucher_expiration
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-
-    #[test]
-    fn test_metadata_serialization() {
-        let expected = r#"{
-            "name": "test-label",
-            "expiration": 86400,
-            "resolver": null,
-            "asset_uri": ""
-        }"#
-        .replace(" ", "")
-        .replace("\n", "");
-
-        // Test metadata to_json.
-        let metadata = NameTokenMetadata::with_no_resolver("test-label", 86400, "");
-        assert_eq!(expected, metadata.json());
-
-        // Test metadata from_json.
-        let deserialized: NameTokenMetadata = expected.try_into().unwrap();
-        assert_eq!(metadata, deserialized);
-
-        let expected = r#"{
-            "name": "test-label",
-            "expiration": 86400,
-            "resolver": "hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a",
-            "asset_uri": "https://example.com/asset-uri"
-        }"#
-        .replace(" ", "")
-        .replace("\n", "");
-
-        // Test metadata to_json.
-        let metadata = NameTokenMetadata::with_resolver(
-            "test-label",
-            86400,
-            "https://example.com/asset-uri",
-            Address::new("hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a")
-                .unwrap(),
-        );
-        assert_eq!(expected, metadata.json());
-
-        // Test metadata from_json.
-        let deserialized: NameTokenMetadata = expected.try_into().unwrap();
-        assert_eq!(metadata, deserialized);
-    }
-}
-
\ No newline at end of file +data_structures.rs - source

casper_name_contracts/
data_structures.rs

1use odra::{
+2    casper_types::{U256, U512},
+3    prelude::*,
+4};
+5use serde::{Deserialize, Serialize};
+6
+7/// Errors that can occur while working with name tokens.
+8#[odra::odra_error]
+9#[derive(Debug)]
+10pub enum NameTokenError {
+11    EmptyTLD = 1001,
+12    TLDNotSupported = 1002,
+13    PastExpirationDate = 1003,
+14    EmptyLabel = 1004,
+15    SLDDoesNotExist = 1005,
+16    SerializationError = 1006,
+17    DeserializationError = 1007,
+18    InvalidMetadata = 1008,
+19}
+20
+21/// Metadata associated with a name token.
+22#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)]
+23pub struct NameTokenMetadata {
+24    name: String,
+25    expiration: u64,
+26    resolver: Option<Address>,
+27    asset_uri: String,
+28}
+29
+30impl NameTokenMetadata {
+31    pub fn with_resolver(name: &str, expiration: u64, asset_uri: &str, resolver: Address) -> Self {
+32        Self {
+33            name: String::from(name),
+34            expiration,
+35            resolver: Some(resolver),
+36            asset_uri: String::from(asset_uri),
+37        }
+38    }
+39
+40    pub fn with_no_resolver(name: &str, expiration: u64, asset_uri: &str) -> Self {
+41        Self {
+42            name: String::from(name),
+43            expiration,
+44            resolver: None,
+45            asset_uri: String::from(asset_uri),
+46        }
+47    }
+48
+49    pub fn set_resolver(&mut self, resolver: Address) {
+50        self.resolver = Some(resolver);
+51    }
+52
+53    pub fn resolver(&self) -> OdraResult<Option<Address>> {
+54        Ok(self.resolver)
+55    }
+56
+57    pub fn clear_resolver(&mut self) {
+58        self.resolver = None;
+59    }
+60
+61    pub fn json(&self) -> String {
+62        serde_json_wasm::to_string(&self).unwrap()
+63    }
+64
+65    pub fn to_vec(&self) -> Vec<(String, String)> {
+66        let mut vec = Vec::new();
+67        vec.push(("asset_uri".to_string(), self.asset_uri.clone()));
+68        vec.push(("expiration".to_string(), self.expiration.to_string()));
+69        vec.push(("name".to_string(), self.name.clone()));
+70        if let Some(resolver) = &self.resolver {
+71            vec.push(("resolver".to_string(), resolver.to_string()));
+72        }
+73        vec
+74    }
+75
+76    pub fn expiration(&self) -> u64 {
+77        self.expiration
+78    }
+79
+80    pub fn set_expiration(&mut self, expiration: u64) {
+81        self.expiration = expiration;
+82    }
+83}
+84
+85impl TryFrom<String> for NameTokenMetadata {
+86    type Error = NameTokenError;
+87
+88    fn try_from(value: String) -> Result<Self, Self::Error> {
+89        serde_json_wasm::from_str(&value).map_err(|_| NameTokenError::DeserializationError)
+90    }
+91}
+92
+93impl TryFrom<Vec<(String, String)>> for NameTokenMetadata {
+94    type Error = NameTokenError;
+95
+96    fn try_from(value: Vec<(String, String)>) -> Result<Self, Self::Error> {
+97        let name = value
+98            .iter()
+99            .find(|(key, _)| key == "name")
+100            .ok_or(NameTokenError::DeserializationError)?
+101            .1
+102            .clone();
+103
+104        let expiration = value
+105            .iter()
+106            .find(|(key, _)| key == "expiration")
+107            .ok_or(NameTokenError::DeserializationError)?
+108            .1
+109            .parse()
+110            .map_err(|_| NameTokenError::DeserializationError)?;
+111
+112        let resolver = value
+113            .iter()
+114            .find(|(key, _)| key == "resolver")
+115            .cloned()
+116            .map(|(_, value)| {
+117                Address::from_str(&value).map_err(|_| NameTokenError::DeserializationError)
+118            })
+119            .transpose()?;
+120
+121        let asset_uri = value
+122            .iter()
+123            .find(|(key, _)| key == "asset_uri")
+124            .map(|(_, value)| value.clone())
+125            .unwrap_or_default();
+126
+127        Ok(NameTokenMetadata {
+128            name,
+129            expiration,
+130            resolver,
+131            asset_uri,
+132        })
+133    }
+134}
+135
+136/// Information about a payment.
+137#[odra::odra_type]
+138pub struct PaymentInfo {
+139    pub buyer: Address,
+140    pub payment_id: String,
+141    pub amount: U512,
+142}
+143
+144/// List of [NameMintInfo] structs and the expiration time of the voucher.
+145#[odra::odra_type]
+146pub struct TokenizationVoucher {
+147    pub names: Vec<NameMintInfo>,
+148    pub voucher_expiration: u64,
+149}
+150
+151impl TokenizationVoucher {
+152    pub fn new(names: Vec<NameMintInfo>, voucher_expiration: u64) -> Self {
+153        Self {
+154            names,
+155            voucher_expiration,
+156        }
+157    }
+158}
+159
+160/// Information about a payment and a list of [NameMintInfo] structs.
+161#[odra::odra_type]
+162pub struct PaymentVoucher {
+163    pub payment: PaymentInfo,
+164    pub names: Vec<NameMintInfo>,
+165    pub voucher_expiration: u64,
+166}
+167
+168impl PaymentVoucher {
+169    pub fn new(
+170        amount: U512,
+171        payment_id: &str,
+172        buyer: Address,
+173        names: Vec<NameMintInfo>,
+174        voucher_expiration: u64,
+175    ) -> Self {
+176        Self {
+177            payment: PaymentInfo {
+178                buyer,
+179                payment_id: String::from(payment_id),
+180                amount,
+181            },
+182            names,
+183            voucher_expiration,
+184        }
+185    }
+186}
+187
+188impl From<PaymentVoucher> for TokenizationVoucher {
+189    fn from(voucher: PaymentVoucher) -> Self {
+190        Self {
+191            names: voucher.names,
+192            voucher_expiration: voucher.voucher_expiration,
+193        }
+194    }
+195}
+196
+197/// Information about a payment and a list of [NameTransferInfo] structs.
+198#[odra::odra_type]
+199pub struct SecondarySaleVoucher {
+200    pub payment: PaymentInfo,
+201    pub names: Vec<NameTransferInfo>,
+202    pub voucher_expiration: u64,
+203}
+204
+205/// Pair of a label and owner address.
+206#[odra::odra_type]
+207pub struct NameTransferInfo {
+208    pub label: String,
+209    pub owner: Address,
+210}
+211
+212/// Basic minting information for a name token.
+213#[odra::odra_type]
+214pub struct NameMintInfo {
+215    pub label: String,
+216    pub owner: Address,
+217    pub token_expiration: u64,
+218    pub asset_uri: String,
+219}
+220
+221impl NameMintInfo {
+222    pub fn new(label: &str, owner: Address, token_expiration: u64, asset_uri: &str) -> Self {
+223        Self {
+224            label: String::from(label),
+225            owner,
+226            token_expiration,
+227            asset_uri: String::from(asset_uri),
+228        }
+229    }
+230}
+231
+232/// Renewal information with new expiration time.
+233#[odra::odra_type]
+234pub struct TokenRenewalInfo {
+235    pub token_id: U256,
+236    pub token_expiration: u64,
+237}
+238
+239impl TokenRenewalInfo {
+240    pub fn new(token_id: U256, token_expiration: u64) -> Self {
+241        Self {
+242            token_id,
+243            token_expiration,
+244        }
+245    }
+246}
+247
+248/// Voucher for renewing multiple name tokens, plus payment information.
+249#[odra::odra_type]
+250pub struct RenewalPaymentVoucher {
+251    pub payment: PaymentInfo,
+252    pub tokens: Vec<TokenRenewalInfo>,
+253    pub voucher_expiration: u64,
+254}
+255
+256impl RenewalPaymentVoucher {
+257    pub fn new(
+258        amount: U512,
+259        payment_id: &str,
+260        buyer: Address,
+261        tokens: Vec<TokenRenewalInfo>,
+262        voucher_expiration: u64,
+263    ) -> Self {
+264        Self {
+265            payment: PaymentInfo {
+266                buyer,
+267                payment_id: String::from(payment_id),
+268                amount,
+269            },
+270            tokens,
+271            voucher_expiration,
+272        }
+273    }
+274}
+275
+276/// Voucher for renewing multiple name tokens.
+277#[odra::odra_type]
+278pub struct RenewalVoucher {
+279    pub tokens: Vec<TokenRenewalInfo>,
+280    pub voucher_expiration: u64,
+281}
+282
+283impl RenewalVoucher {
+284    pub fn new(tokens: Vec<TokenRenewalInfo>, voucher_expiration: u64) -> Self {
+285        Self {
+286            tokens,
+287            voucher_expiration,
+288        }
+289    }
+290}
+291
+292impl From<RenewalPaymentVoucher> for RenewalVoucher {
+293    fn from(voucher: RenewalPaymentVoucher) -> Self {
+294        Self {
+295            tokens: voucher.tokens,
+296            voucher_expiration: voucher.voucher_expiration,
+297        }
+298    }
+299}
+300
+301pub trait Payment {
+302    fn payment_info(&self) -> &PaymentInfo;
+303}
+304
+305impl Payment for PaymentVoucher {
+306    fn payment_info(&self) -> &PaymentInfo {
+307        &self.payment
+308    }
+309}
+310
+311impl Payment for RenewalPaymentVoucher {
+312    fn payment_info(&self) -> &PaymentInfo {
+313        &self.payment
+314    }
+315}
+316
+317impl Payment for SecondarySaleVoucher {
+318    fn payment_info(&self) -> &PaymentInfo {
+319        &self.payment
+320    }
+321}
+322
+323pub trait ExpirableVoucher {
+324    fn expiration_time(&self) -> u64;
+325}
+326
+327impl ExpirableVoucher for TokenizationVoucher {
+328    fn expiration_time(&self) -> u64 {
+329        self.voucher_expiration
+330    }
+331}
+332
+333impl ExpirableVoucher for RenewalVoucher {
+334    fn expiration_time(&self) -> u64 {
+335        self.voucher_expiration
+336    }
+337}
+338
+339#[cfg(test)]
+340mod tests {
+341    use super::*;
+342
+343    #[test]
+344    fn test_metadata_serialization() {
+345        let expected = r#"{
+346            "name": "test-label",
+347            "expiration": 86400,
+348            "resolver": null,
+349            "asset_uri": ""
+350        }"#
+351        .replace(" ", "")
+352        .replace("\n", "");
+353
+354        // Test metadata to_json.
+355        let metadata = NameTokenMetadata::with_no_resolver("test-label", 86400, "");
+356        assert_eq!(expected, metadata.json());
+357
+358        // Test metadata from_json.
+359        let deserialized: NameTokenMetadata = expected.try_into().unwrap();
+360        assert_eq!(metadata, deserialized);
+361
+362        let expected = r#"{
+363            "name": "test-label",
+364            "expiration": 86400,
+365            "resolver": "hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a",
+366            "asset_uri": "https://example.com/asset-uri"
+367        }"#
+368        .replace(" ", "")
+369        .replace("\n", "");
+370
+371        // Test metadata to_json.
+372        let metadata = NameTokenMetadata::with_resolver(
+373            "test-label",
+374            86400,
+375            "https://example.com/asset-uri",
+376            Address::new("hash-7ba9daac84bebee8111c186588f21ebca35550b6cf1244e71768bd871938be6a")
+377                .unwrap(),
+378        );
+379        assert_eq!(expected, metadata.json());
+380
+381        // Test metadata from_json.
+382        let deserialized: NameTokenMetadata = expected.try_into().unwrap();
+383        assert_eq!(metadata, deserialized);
+384    }
+385}
\ No newline at end of file diff --git a/docs/src/casper_name_contracts/lib.rs.html b/docs/src/casper_name_contracts/lib.rs.html index a0c691a..a9924d2 100644 --- a/docs/src/casper_name_contracts/lib.rs.html +++ b/docs/src/casper_name_contracts/lib.rs.html @@ -1,19 +1,9 @@ -lib.rs - source

casper_name_contracts/
lib.rs

-1
-2
-3
-4
-5
-6
-7
-8
-9
#![cfg_attr(not(test), no_std)]
-#![cfg_attr(not(test), no_main)]
-extern crate alloc;
-
-pub mod contracts;
-pub mod data_structures;
-
-#[cfg(test)]
-pub mod test_context;
-
\ No newline at end of file +lib.rs - source

casper_name_contracts/
lib.rs

1#![cfg_attr(not(test), no_std)]
+2#![cfg_attr(not(test), no_main)]
+3extern crate alloc;
+4
+5pub mod contracts;
+6pub mod data_structures;
+7
+8#[cfg(test)]
+9pub mod test_context;
\ No newline at end of file diff --git a/docs/static.files/COPYRIGHT-eb44e4cf.txt b/docs/static.files/COPYRIGHT-7fb11f4e.txt similarity index 65% rename from docs/static.files/COPYRIGHT-eb44e4cf.txt rename to docs/static.files/COPYRIGHT-7fb11f4e.txt index 1447df7..752dab0 100644 --- a/docs/static.files/COPYRIGHT-eb44e4cf.txt +++ b/docs/static.files/COPYRIGHT-7fb11f4e.txt @@ -36,7 +36,7 @@ included, and carry their own copyright notices and license terms: See SourceCodePro-LICENSE.txt. * Source Serif 4 (SourceSerif4-Regular.ttf.woff2, SourceSerif4-Bold.ttf.woff2, - SourceSerif4-It.ttf.woff2): + SourceSerif4-It.ttf.woff2, SourceSerif4-Semibold.ttf.woff2): Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United @@ -45,6 +45,27 @@ included, and carry their own copyright notices and license terms: Licensed under the SIL Open Font License, Version 1.1. See SourceSerif4-LICENSE.md. +* Nanum Barun Gothic Font (NanumBarunGothic.woff2) + + Copyright 2010, NAVER Corporation (http://www.nhncorp.com) + with Reserved Font Name Nanum, Naver Nanum, NanumGothic, Naver NanumGothic, + NanumMyeongjo, Naver NanumMyeongjo, NanumBrush, Naver NanumBrush, NanumPen, + Naver NanumPen, Naver NanumGothicEco, NanumGothicEco, + Naver NanumMyeongjoEco, NanumMyeongjoEco, Naver NanumGothicLight, + NanumGothicLight, NanumBarunGothic, Naver NanumBarunGothic. + + https://hangeul.naver.com/2017/nanum + https://github.com/hiun/NanumBarunGothic + + Licensed under the SIL Open Font License, Version 1.1. + See NanumBarunGothic-LICENSE.txt. + +* Rust logos (rust-logo.svg, favicon.svg, favicon-32x32.png) + + Copyright 2025 Rust Foundation. + Licensed under the Creative Commons Attribution license (CC-BY). + https://rustfoundation.org/policy/rust-trademark-policy/ + This copyright file is intended to be distributed with rustdoc output. # REUSE-IgnoreEnd diff --git a/docs/static.files/FiraMono-Medium-86f75c8c.woff2 b/docs/static.files/FiraMono-Medium-86f75c8c.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..610e9b2071ec1d6c47a7815010acb20f0abbdd98 GIT binary patch literal 64572 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 N?7!cn*`i$bGXP%$q+|d9 literal 0 HcmV?d00001 diff --git a/docs/static.files/FiraMono-Regular-87c26294.woff2 b/docs/static.files/FiraMono-Regular-87c26294.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9fa44b7cc2d38680bc14df07ddf3f6b320740da5 GIT binary patch literal 64868 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

^#>IXLWsI|EZ!SFj*H;jok!m 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 literal 0 HcmV?d00001 diff --git a/docs/static.files/FiraSans-Italic-81dc35de.woff2 b/docs/static.files/FiraSans-Italic-81dc35de.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3f63664fee6ddf221f71a57461a7f4d1de281177 GIT binary patch literal 136300 zcmV)LK)JtnPew8T0RR910u*cj5dZ)H21ncg0u%!P1REj%00000000000000000000 z0000Qg9sah=u{kmi9!Zo0D+=z2!T=wmlqKT3XacgjO8BzHUcCA(liUwH~<771&mP# zf!B2mfjL_!sI}awv>@!n`(|ou47_WSJP$%jZL50){F{vVenHY8P||r7-3=UQ$B>2t zQmbE2WJ2i}-UCumA+1f+WuL>nKt(t|KKuXw|NsC0|NsC0|NsC0zs+P4PL=L$J=hL{ z0|4#PLD~@z6Q+fX@ykR>zZ_0f1T1v8p!P|wG~f?HhRJ>KTRmzr#QrOCRr ztT$US3cLM@p**wp6ltxI)~XXKtS%jBFq*^}GX3~0=^8*&Zg`npIk^hYLKt<>PL^~H zt zj+~UGZ#7vNcFA6NFufiu3vK4KMK^-}O)Ko&LJ=sUeCrmveW#bo%7*SnhG&>Qhayk} zil~OHS>&1mG!~q_SEjPz2JR$)qI!SP7q%U0TFk3vPRsgGKZw}<6Nl2eKJIbz(B**y zSi@!#g~HQ9h7LNvTLb|G!BUtZW2{)qZ0N{Ya$+qrMkotJsavH-{3^ci&-s}Pgr!qF zA-(u96oDyG)-5RbETo7@U?OBQriOGwKVd=@qx`7OiqxQEl5RX=$EUYTaZE`{SVPY$ zr<8c^eWZSJCyLXz==t4ju-W7&z%RtRt@^!Yt~Ku*QP5@|#0PKqz6e*>q%k8zdx1k`IyA28z;>=kLHy zl$J@BYb9g2CTUf!Gh@ZtD?Hp9wYN`#a5kBjs+pXw8+}Zl!~5c!MfyxwX_7FF%H0eL z+OUv>(*zU^je^4smZS*{%B?qgcp&#q{TE;JA7K|~u~8oH zPqH9q#q#)rdHc?A^S%U|xlbNE0CU#mpTFRfB{kdZdP%*3#k0p)=6cKul)D74iFa$| z>=U?-uP0cZ!mRp6S=3tz5Ru6*P}7GFbbZ}o_rJ2DQ5%Af9$fQkJ87RJ*!j2qUbyk! zjhyc@7ZFcU<Ci+bQWUDW9UmGN3# zycH7-$ac9fGFrcDlRL?I1DeeA((Iuc&PPqAR}h1sV(vDkVS!>-)?9DTi+qrku4 zj@d9fXC>c7KVIl6Pc6^$sh~pjAjk%>qbMD0Danm_eQsHla5`zzEON|v^Hb?365N5> z^E;1HXEAu;y9ZQ5c?I#^`_eCpxR%qLp_m-kT=0upxMF2@hrd?QtO)z-9ynb1H>6vMw$1dQ_5Q;z%s73t=Os6aVH(ydL^xrLz zp+rC5uwgk#@4bJ7lj?~!)P4+CHU6|%r&fdggIR$`1&yD0_@@kqL!`y{WH$JZaro|6 zxsw3Kwha?0L$Qi9FgTQe6eFTBm5zwHFDsG3+J^dmoEO*#RIlv?R&JyR&%)pE+#mD> z4}N(`|2#Z@>^=AWTm|s_1CBFGaYVEB;{RV3|8B2y-=Ar#97<3_NC?JZ(F!3{f#|VS zpAnHYz1wp@BJ36-Tf`QEg&q*Oda}jtc>;j_l_+jllf^7@av zTMy{f?9O<3kgA|dCH|jI)vdbqgB&g)%gx(6E%NHDcV{fyjum7TIG~1ffwdhwj2)i8 z=KEJ&SgVy+L)0>tpi9&uhh$6*EsW~np6!RadE$X{j$u4~+~|RZnoyi`6ySj##COf? z{%PX>@elOChj&?PRN$sSn$ZZB(TK*392WKAs;&2_iux7@}fKH>|0D6IG)dThM^MMpd{9$7rhwtP2!GhgH?t>Z}|LjbJK39XkpH6Zv^Hx$w~I~Rr$ID+}@ zS0(A+=|QT@tL*Lppisw(!IDzv+z|k9tEN?TviTs^OiGn*FTPY&2FN^9GB&;Otz($J ztykh-h_TFkmSyEYjBl(A!(X*Px+g4J{l8TE2jo&?E=3Y5mJk=zT$0T6-*|uf7Q0oB$9Wd7 zE5B-ufJV{-Ar5=j#Qot2(oM31II$TX`P}+Hy<#m=0Ul%=80L#=7OM=cS>`aG4e;VD z%@WQMCpmsVDk@W@Pt}PES5=|P1JAMiSHVe9y(+NLy%SoP&ksks0VWRW6Stqf8lroA zttgftA;h8u19mRFIhqYwi*%+>vQGxo>rW;W?gLITYq~(u)G3-K^RE3~CuO==qI#zj zz0*1&pZMQ);(|FvrnvKG0^WRV5TdK7S_p7kn|k8&%}~t|Wnn8;j2(WqCPYa2n_bA; zKKy^}XPxdJsNCVMH$SuVmH>40=-3s?GAmM~FMNIb@p-$tdf!YhL4YTOBpi@11bU50 zJOC)cLg&POl`aJH2|PcK$H(PzWm0*GOd3sYPN|cjuvnf2Cfy@ z>jpNvD=_~WFbD(4aF&pbu%FCYcHwEuHI{|%=@9}SGFj!!i5=dFN$|4$4I zq_Xziyqt<=5(w%*^~2Zye*ae8`RS8)f_QhyL}=Col7-FkC>)_8p-=(Q0IFd%90jOu zf$^fg==A&8JV*n_0Ra-FSt<1o%XoF)Zd$Jk00;t_HBH^Oj#|~o;IssJ{X7MwyADqP zdO#jPoH+RZ|84Uj>3iQ3UZEs?bkYh!B+WvxmVM4XaAtYY8FGD@*LiE{a$e(Ceh0dp zZfVd}G?ZqwJmD$;OQPxekyOZNo|px%2pT2-#uNm%&u^zhM5t_d23bV+s6@>w`0sV=&)j4}&^7Rf)$Mj){?@c_Hn8pX%PsSO*pB^|Qi(y=S(L2eFaDdZ z4B(7>SO%!5Q+4(t%_$S$1N>5||Fl(~tI~4Oc?^rkK4}7c;83uOrd}^4 z&H<~A;;3~b*ARN#)`$O3-6vtUVK>)#34gf@JETtu@3It>m+F)$${lyrkwf6WsWn2p zNDM1nG=!20iu%pGzy5PKi@az+L&!eiqFakP$Ce7}SYs1%+W%|Q$lKd+Z9>gp&1_&+ zu4lJUbG)G%0SbTqU-2L3@_+lEEvG$BQo3<^1Cnb8UQbN}IbwgCo8PC?R_**cgbI-C zgk|$PE5x%q@49P?YZ?F!(n|AS+};s9{Qtdgd=g4*CtdIf1^JhH@YBsr>0J7Z(0C($ zIQTFaoHd{Wg57XKDs4N__clst%% zoFlSjA9@x5QnE;?CrTNIRhC(7D7!PvZD$zw*=#+GJ1=vx@-oYKnf)#&KX22rm1X$| z+k{IlN^?;K>ZDHk%!l_^8Zyb|CGswN1Nc79%-75qj=8*)fZR2JZ7JPxmjwQ)X(iR$ zEI4)e&TeSu0qg=Lqn_DueYJYeszrTrN_|m_^u96It5d~4VvCGjjPZWN5ucy}io@5y9ESq4~s5Nlwo1To{8?{+R${gAu zU3lR|`GuE;5M7-gzn0n*e_7qQI~72uB4k{J>xL#cQ@WYZ4^J7~D*&xr8CfG*VQmQh zzgMfpyo;5h*&rpG$=E!h`+s5nkubW|i)s9N8ap4~m=;#mxM7Qk5FZl}I~P%8IR#Ij zCxPv=EY%7mg`3(B2I!2+KYT+!#qxE9%M6X6)|Bo1aeX^(auVe%KrS5+$#oXN%b!Xi1!vv=w*^Qpq%|jIXJ5MqUBx&_Q@J(_jSd?+-kmn2 zaNV8LX8kHjs8mRx5;BxTk_6qBgxg308zF3?U|L9^76N1}pxXrRbC^JyWKU2@qOIT{ zfs>#E0(YX5!=&KU^W5$UZcj>X_okGNbKG<~ObVyH-u8N*)4n}l_HtOi|Fzz9og117 zPOw~*jg`MD^xnIno-*}MhoC1s0qPLhC>3Fs!R-pUa{GyIV#7@=&`*5B6KZ+BZ}rY| z`evP$NQCig73)jFQc;Zj#v>$1q=4xAp&OsRDv5eRM+ntA<)Ev8aMMQaz5K_e_b6SBJCp^w3eeR#CKeoAN<}2#9{Audlds{4?X&&hM|h$;*HZpis-;uy zln{or)QTYpaOnBEamIZNK<;Mc&6Gea0df?$)7uA%v9*u`Nir@4NgxrYY?Whhvpuxv zNu1y;$?VZwX_McZ$9>!q#T8KKuM-tAv$Hvx%v0|F+vZbXI7KB^Rcs7{(5n9bn>Jes z{YxA{?zZFf6zxhCZRnZ_|Gh!X+)tV}Y#KsH4oP-J3}T&xDwfWjOXmugE(-${&ZY~T zM1gRkH@i_y_PFMz`_dHIe#L9N(0J!YM=*nHP z-L)7fVYWa$UJ&|@bP6aef%@&Sj$I^|tSXA4RUVY!3+~`+Z_IsrMU&1_f*caWGQ}|r z%kcRLf+!A+;pjO#9U7H*y0_8SpBv=;dQ3!gzupibAtDkI8v);mJ&J5dk1Oe|c3b!a z6O1uNh=&kDg!!FVFa5{0OZQ*bid9t=5fw4UGoF!u!2fUg@qN}lgUJO4XAqJ7-Rg0)kVudxXLO*f_)ixPUplR zL?eo%DVib?Nsd*QQH9+>e9;Bbb1cKK6h;_fgb_uDkCAS@pO``r^n#Ft-TZi)WSDw5 zIf#fz5D6iOynnTK2-4lq?;8urjkU@{#2Y(^h=@oC`Qzu==D&yPH&hIwE-6X~+K6*F zoxcBjkkkMF8y#n?_xIhe9NOwsLc~l+2r~39Vl6}V(-vYi$PoyqQf0DDeZ?2y2uE0q z5n>R+EdN*gF?IeL}G9b0K}M*-SOAgLFVlL1*PrP z_IhvZ_D+$d0)osy0tp$*zW?FreE<1BYjPg<(SFwER#a3(#28UgQBhUfRi}}4GK?8A zlpo3yj&KBHZg`9k!gLu*vCzR7Vs9;35W2Z@Kff}vt^6H{x8`gp3iv>ZAdX%)BezH= zXX!0GE24<#Hx^MDj9XP@&lR4l`J?mQy`TAXzH0OJ_Z@$&9kEl#>BSWxnVQXQBJD6h z`uV*mrAh~DJ7ZTZ(;jq2+r0n*2@MD?V;W|SDS|Sl8lY}rmI+od>jCZFZ?ZpE zjRQL?Kf5#j%YFRgvH8!{_}>lb-F?^ne8B%q5#{~PIbimFKXZzKWaEJ;U;mpRvJp!|Nn=0Q&eRqCLyP!qM-vZB%Fci-pmF?@Ci$x<(0Dj{>8WZHqOwb z=8X&qtdmgKyX)5Szx-xq=SB*OqundZ@@Hog1pME%0)l`BP=((Z8bBjx0?oeve@7!I zpazS9#laHcAI_3s4OMdwhRs^F>(s5Vw6XvI!4ZN0n!r&gUZ2{7y;AxPMS8nk(b!Mf;M|{wN=x1n?k6hDXr{S60X2i{;v{2@lruIF6Kud664LmK=`CuUTNyX2HLC zv*wGsafY$gUoai}vQ%tt)ZU?;m z&qv`%jXml>fGv$V-4b_ejO7IU-+BS=fgAx;*&Dw~ULCYcofVv)yg`&=Go~PE;dJAv&-Gg?H$@ou?)rVOGgvOJ#}%-aUTIQYJ6~wV)=cF zL4;3V@cE=LIuG?{1q?06C9GA7&0|1fi)$P}!9pwD?!xB6V#*%iV?nH6)iX0waQrfl zupVwIp*6bRehukEx>MM)8_4CLI%rj7C|OFg4*2ZRzp;k3#Dsmg64Ln!2WBAMvtdUO z@cKi?UFjf{P*z$MUI(SU2%$O5Gc`5&Hjna0sCrAyAd%zBsD($v>WV_f%u4`q{;5?0J>?(1KBJS)`M`|iCHqYOFvvq;3wbZI1HoNnJT4=0xl$kh?E&1FxF zzggth=gdlkRJ+nEIpXwcRB=S`shRvyfM_1}1J0rks7aXNI#SNivqX|+c&6l~gGQJ# z86|yueK8o1e?IRCxCFpMCmt@xmu1B`Y7;a$M|@t8hYzJluEU6X>%k!UX1RwYjZxp0 zgs2QX40O*l0az!e()tCEy4bCQv=WpXQS>Fir(nfaTdo0H`x+^$y?vEgvYD)E)x0r8 z=}J@{ipJ%~h<4Uc`4L@JtR=2+K-^N^*$5&50`+kTYAAsM{^nb`4D0Ur7&#c$GKrD^ z)vm%JN2}S6f}h1|v?K|U$TCNYwgj6dwQW+<43@^Hg@poIwA*hgv8X@IbMW_&8^!?&`pSSi1u{###7BihQ_Z!S*JF<%#Tc%@%x8v>Izr z1y7GvpK>k?zd6Yu?1Cs2UNv}B?19&H3JKusnJp`|0zS)Qd6#_1x<;jA)7tZ%NkkG? zQCyaE8fA;(fu7nUfTSWT9;M%iOedNI%BdJslC7>MFm!U7!XOJ;0M-z%rC33*gC5)n zi;@~Q8n>wIBma#dEmG8`M*AjeY$mDQW+b2_(xXi@a~tz3+3ItojYkhhX)yKx$BVYu znx=RNXP((|eDx8K;847t0KV)3uY!sIImgZBxJ*KgFp_pb4LJ|uB+?HrzOT|)7c^0+ zyO^6YbdNd>=-mkV82VjFWYv1mur)EB4UphWGxUhmbx`?#L(aDCOe#xWvJlr+lrA|M zCDECFXEWgp3?q;|ogiBmYSIvIO4adKxPRb7$Qn?}#g=}DrQUNez>EG%S|6NdbA7P& zMw#G`MC^he?(t(R%(x{FH_cZzp9{midJW7aEPzMgzFYiuUFh}T?CzY6K&&zFN=>pQ zzy<(4FYcT3unn0)yJ>YQCIW{f)D6NSF;yEY;uaIgl~U!-#L0+%6>2KftX8^2|C`)3 zCBKDE%7A0$1dDQ(FK??WV`EdP6*NLPd8@7#Jnp-Z|tCrPnh^ zj~-}$UcD~2@mg>lsvT)*c9j5Bw$n&;F!T$e7UgI{Z3pmg=px`}9thB{pY$}VBt7wh z7s>+LPdIU6;W%1n)Gdqg0tE=wgTP(Od1)Tl!F-gs+J2yCPnbv4RJ7@NGIRy{MXn;| z^Oca};%Yz|1*Q#YOcqO`B5~i)W1Hjp?9V9|u{N044)%aU-~>1au7F$jJ<=IpFP?te zdU0aBwXd3B=m3BKk_Ipw>Rylo2<4^33gm<(Hb{z??5&kXh6(eo%UFOB36OPX+ag$} zB9Xw&<)Vp}0WpOz(V?p&4pLiYrB`BQj@{i)s%IYtcpp2z14ho)^z4?nxW|081y z(JRo#ko|Tc?58{|VA>8(bvn_RS+jh+^^W58#3p95!c@{hj@32CdDLMZ6DGBHVc0#^ z#}HN}tP>N3J_!u!8j_Q5^~(1Orvc)`ylC*>q@JYO`25np)UXFYP$7EY62RJ$Mk{;c z6dlwme}yS)G(?3S%8`s#z+luRETv#H?s6IzG06g*Y@~+@3;;tOs+^CRW3xxh*SH0H z03B}Q)S79%XS%w4_Y=<6u)>qEvN}XR;{z9cByZp%KJF15}V1VC?R0leTYRwh!+vrjK z8AeXOb#jgw9j~;ytbiJ%ZlJ3aMPMLPtVGDbTygtGVV8BdcW53Q8h;#9|1UvDaQZbv zVF@h#w7mD~L7{H)#q%%FumYZIn*u`Rf{Lr3sqTLo;Q!tKCngq~TKk(l*}p-NTzXs_ z>O$?~k}Jvdn)X-#4VTt}UqZ=M)sm4P$JbPf|9ssq$lu|A;s2hdF`7k)h4MPfKG^Sr zp~c1#*omR7Q@K{2sL@a>vZ>B2so0J?u*RW1w4c;RBRCL0^OGrun!~aoi4al)?s?#w$dLOj8QVQ(%^lRqMs;Jdc=o)3O?au=#=gGoX<=zYRP3k zgM;iR$N0+9^};RRG&xlQ4ai*d9-n6c0?G$JaIw-OS4*GyiJV{bW^#TN=UG&!)Zx7E zIn*0!HQ)0aFMRO3g@8aQSPNHurV*KOB;d_9HU6w%x^;d;3fvqA<%YKQX zICfdo#sM82+9G-g4Zp?t28_lrm?j6OFj$ZW<)3LfuuI)JSOYFNSltU`4{%xvz-zF# z%9XD~1R=2v@i_u%Bv~^ur_}{exD(zYc1Agyxva@&R}V zO+ynGYLsHah|LP3K4;kFGvapH5I*^K9LAI zQW5#cLbhP25~co|Q6Fiq`wEL*bXgq7;0Yd$3#>53!E3XaL<|OzK`>E})>?$2eu)hxymwPkV52NeAe~$-Rmd^! zUj8lBO7-nE;|fkwe?S!G1ybio1{h3dv@qD}F}i3ij1EX{!RZ7&!2rD^A#z4Yr+$(BItbpv=>il^wv77RU2r&!GoP9Qge>B`j&xp9kYyb0u&ALHV7|x( zI*A$EfsIAv;*gIg0p3O!? zh-%*2_~}&UL}UFu&ut@F;zr^P)PyX$n-_YGIaTTnzQH;yWyA*oQF#>WEi{`fl2pne ztMX7?uFA>gnbm~b9xCW<8BQ3W{AV)8>?p4&AWwb6OQ4izVnM(b<^|^d05zD?6{@9i zMNGG@w35Y@DUu6oQ^8E2kBhBRhRal2`WtE(!ql1#9Kh5;85Bjk05ehz^~GggBN`F7 zfV|ZFjR^f!%S)}qX|b~8a*3Q#D!GzNb#e{BV86;T6yz;la0fAKVTH_VW%Jh)<^1kK z6}?T(AOYIsu`OXAQVB5N&6O=H6NY86F-}mVbYd2S(2>p57Wb|8X7Pdq+F>YDeR=PU z#JP3GJi3xYr@r~_#+ftcqC{)at;r{|=6v$mbzRLhKENgw7_{;ZyVvBA2#4+!ACeNv zcAnp9ut1auX|Z!v1o-?Fh)`-swCGATw<62~oDhm+Gfm!1?lF!x-5g}19C0e-vZ09c zz<@3Z=fLm4S4Rikp;w9;T9IcRe@Q{wt?8Z|NgvnD{fG-B!FG}Q5zWJFN`!L(jP}6UuR)MmB9r=Kz`wfIBee3I*C7`0!w1n7t_)+9mp${F4x5 zI%i1N-KHTFDZgC$4#LLifAe}|*Z|URt=O=|696?1;3T<=E3(~NC@a+^sGjbVtrN}{ zMX!iU+38<-S0@yR7H3fddL!-J~K>BpS zDzF8m-~lTpc-XpEdafbeplC^~xBl%g{TrBG%VkZc$^u>}q%@D3ylZWWCh=C2S}dh9GB36fNi))?S4{sXA&(ZjWal&^0A zXqYoC`Z7U$n(I3ZV@d>EnJBaoRIS+3m9&y+gwLfK1Wz$;#+<*Fo(U7AA6^1Lq!@S|J(*Yny zH=#6i07-XB$>R&WHBwGYsI}ep!n8+b;2Ruk;*_xJ3Z}J8!qnH$8xt`bFK!dQwSn6Z z@-Qt;FQURu8%>f5|T90?3BeNj)YDe|heQ{MxY0kN+TVforwI z`u#+ahgel2H1nuLBr%e_@`PMU=^0+6BEBloz!06@;N3$t_>f_apXdcLFsI&JL%*TK zEFo&z&~HI6BRVO0gyOJ01HFPsh>&<+TcWgomoAlk(q64FX#4fh|AyY^qcf@lCiIq^ z^li|@Du;042FHV!03jlZqr_xV^hu==ZOVuo1z5_|Xwaf#I5mt)QXfX}Oz$;Ul5N)E zZ1MN9Iw_&VWr|mO%x9%Q7p1lMkCu_ID#+|j#eDo4x~to(4|QKf`|Yu+^+%xRdZO2Q zp|=`Nz1v^bM+Eh`dt@VPnpI50$7N*o^gzt|=^4lvo-8>*j+|=6b9a_o1M%dk*?2-W z8L6L>N!w&*zMc!4f~c0VG!E!#?Vh=G$o~99IiJz7-ZAZQJT$wKvHL=%zSu0=x_WvBfTL_Ma@SXT$L4x0*nhbt4Ly8o@RBaQs_<1Aj9B=W7fZ(jA<&a1R1lk*c>jGok5VZ z{ykCmW{6+!%M>Y4C~r>`Yxv3L3NV2X{qC)Qck+M|Gp2bD6f zQfLM!J|pGnnWW#`%s>Hl#*$+e4oYk)r&?;fy``tTy#w_pH_|qR#LKi5*5`80F$sf^ z_`3*_f0wAzljggMpzpfZ#Pv-XI0&DYxtHz}BByL98oY)bIofj}QUpZFr{Ro7EhWln zrH0fj;Gs(M0s=#_;wi#8!Rb&*j8?|5I`6-GSIsq4`+sBg)=+~r)WpLZX~Ez@ov`SZP+3K}f46E&7aEM8>W4nOII*+n{ir?7nkHbFS4(r>=}L zZmrM6a?;uc#cqC#eHbU)=9Kg9whUyPhgaY$H0>|lA`_pwvn7$1kyF4b|2q0w!|gGx zMmbvtoW2p>)I7_!kcjw8(rGVk`6%1%vAw3@AXskXDZ)Qq33|9)R(4ZGc$UeIlKyC;K{b+*SZLWZn1 z>&apa3u@_e*}Ty&1hvwRv|DW~Q*Ba(UVO+Tw+L=9?IN&jA~8WsuCbx&9mz|| zX@Ig|Ly8D8u{akq(&c>n_4S7rylPftZ#S)qoHGnkS3A}x^7B}NXCKNAin2bDTv#;X z6oYgu81zCdq?pooW+Gm?x}>4r*<0ms-sV|j=}>2sdNJ_sH5lg_bQy7>QR-fwm= z@Xz#M=#y z0>vtAMT<%b5nyc_V$Nf>O-~k~+YJN3Rf=KC@3HB%nf0}39ml{3HhNC7ocF2au#OL4 zpCH3{Y%5*9CNic6Z44zfF*Ff)#4L|raJm-6&fmnCu9u@wL|VJEl11uk>x~LT7ol{^ z>2Y_j4X-4Shr@8_7URwWGQ=9G1(ziukEEP;+F`>Sqh@LPwjWrKS-kJY(b5=%sgus( z;Og0wVLU;i-4T{0!xAU4u)VXdf25K?2za@c`QbRXj>jtDZFm_5cb_&n$^%+m+I|Y zVBciwasYB$Lln$xgJXz?ca^j+Hohf^PKMPy-~M&TPyDy6WBj5H-uM#0JVS?0U=WeC zdv3<30gTVS547;(o$;D-nKYl zgG0=TKAd>ZFxM3l$yF%ZDxJy>^o+0WV+IzdVXTQX)Bc4y-E3PeJ(&DzZa_~wpMc`X zfpzyXX9CM!TRQkXwv6se%0V_;%o8z(f+=pwjy_yivx2Il{>-ef7BI=tJf zMb|Y>;5I%rK3{@UxZ9Qiu=vWedxyXts!+rsvd38^_w*{W=TI=#P@bzbG}kx+THNWl z$@*YaQ~-b3bVoMFE&EQ0i57^RL|;r!P<|V$qG=R#>LA!aFw8*MHg;xK=z%doB>RX8 zVJOXq?qg0+_ojdZFH$ewL^ON#B0Bg0zJY1IiY{TD2cvB> zBWmU_v=(GpvZChbB{Rp3yKw;Rh_!fqltF5CGo^y53u_;x+Xi$qm@pgaTW|_jq8MLy zH!{E21*zSiwOG@N?xFf@qB`*ytM+8i*h>|Al?{crOTV{|ZSJ%0f+?(tHh7CmLU$9sba&4gFMRC+gpgey>G7UK8X4qJSh2lqHRc+%xHay? zqAED_r$!ZI3RA9|_vH|VakE8Xpv&hZ3q-7j(o{@oARR;RG(b-d^ME-zkh*93pD15; z4s_T`Mp$vVjR_;w`3My64#S87_yq}05goHvAdfs?P;!<1qizMRxqr0dTuG{GbgkDr z8wlg&WXxV#zyz_Lt7=$xn`ufPZq=~8Nb148MY^FucX5 z?UWQpo(CSh?HTqb4mQ``eg+@XQ8=b!#FLXqX5T+*JAIvKkSneE(pX{Yrc1~ZnE$Zo|s_Ddn{T)n$r1l-62F9I>N;bxEE;>nY~^0e+-`k#;!IViFZ zK70ALSlflNHw>-NkuewOqVIjgcy-gt=Wh8kLWn|Cs+a3Idq@U5s6+lULJ6Kw1!=Hg zh2H=V_|Rnz1vEaW0sg%+W28Hi+9N4Ys=+D~L)Zul|&v)OBY|Nw@ z7?eUq#`O%EKi!Tl_~`jz5M$PpKzVQ$3(^AQwQ6o%3)*`Bpfs>egLJX&(;I6CJZtZo z)oZ_B2N8d66Bk*BUS9H?SVz!tI5D!vQ%URWWlLC{K`XDz!=3+T!mi-DqL^LV#EsYg zgj?v&?v;!5z*Tz06F<|7y<$V~HuruTe_ZtmThQ+{yg^%2G9?A?l6p#;X@jCZf$zwZ zTR&@$?%&Me=q$I_CVyyK#g>lkvgHgt5IytkC2j9Tf87qi4sm^C$9EEGWROE)j!n;% zy)PZt>d`=pJH(+sH7bx_Vaj#$y*$Ejnxa4AFo{79rAmJ^SVs^WB77ay`$gIX6Uc;3 zs^bhOgfT(n)zk?eA4g;2680w*ug;$Qp$`*ZuAKTQrN_G~h8!baU7^ z3rOgIj{H{uvk1GH#lS&pwC9@y2UC0=XmG$7I0jJ&wA4hRbR9Ef3yMgosRWI&o>9}M z%#dKpco}CU*uE4vGVqZD_aMja#m|{koG7F(vZIfo)Nwp^!>XaXRh#pNX_2$~0q7xrl|puN{3V zutH_488@h99p<z+62?Z9iFW73ave-(FxdsnD0uE#J0D6hpa5{BjlO!8jmb6|B87^}^E;6yK%2Ht?;yCaV zwxR36qZ8D+?IwzXqj*K9tYg@%z1eGzvFi8~;nJ8+;8%W1lix@Sq*c8YFJOwrSM+N! z#l;vW!Ebl(0-p{@7vv7OIZu^d3TSU`WCSwaZhx3*$Yf?9b7}>>aT$`$njc6`!oTVM zE*W@|%YL@w1NlMP)8I+|NNvH5!{j_Ym8CVe5F+IOlXw-#p@a&WLH7$PC}c3)Fl%$5 ztdQFVCs4yQ5(AZkgM`m05T1+PH4-k>8~wtv8uFePD;X-WK6NLoDb^P1a*qbubNz8) zYH}HNG&XaKeTjiXLH5nu4-d5W@~bG2H+6nQf8QLrG~#Q=4&Yls8j@G>6gbZK0-EPC z#kjo#K}Zu=i#*?79%<%44GL6fg+TvlW6a&$@`F7NYd25^Z+tAkLUWN86!nO0C`cyK zfnLY=?&cZsgIU`)u7A`0%K!H9o);2@A}^L}uZoGiiH~L+O-bousg$rGwHnj+?KkGj<}}Mxt9^t6VtmkN>V(5=G{1*LB_3BjUg9 z&K7|OUIY+AWG-I7$#L3S2INoxJ5{cFx%O#%T4?X-e~hz3k=C5fR7BiQ$yGi5rczE@0&gBFX=AVPs7w`87gF{n0|v&*$^wpqF$ zb4hXAGR1Z6$Op)E?e(=EIN+aj$VYVSPS(AkeYt*-I^76FkJgzijO_uRj~u?lU8Jl{ zNx9GLylv{z`S({)C$7?|ViZmLs=9`{eK>VvQ+Ix*jJ#U~3^Ost$re-R^y%HZ2$E)2Hy8 z^}Bi5^T)Iby%{M=VVbjyVOE9FIphsu|Hy6vSKtOdI*$K&p$xI$# z(c%!&v6_U18)T5vi+x~QJcRNfDmpYM$C@<~8k6thC>Im0d@kIe1I|ZG9JR=?@|r6= zVXSQsN|O;o*g*1n>5npZ3B4(}#?Wsi4y+84;+XbdcTDr&aJ`)baj*_?AO0Hrf!fOn zk=k56Tp%6J+T2dlJ}=GgM{+cBrY7|M7CS2k8OF`&qFumY z>Y|e#KHnlw7WyED6!ZDi6dn%FxEyRecp6DU-lPV(ApmESV$nKbEV$Q(5n+{WRQg5 zMyce1Sq5HrvAUawa}9*C_kYB=#Xxl*Ch$%&Z5s>5M3qCw$ZaQ>rgq=7N@AtG7gC6$ zc07mpUARJc?n}KP2&reHWk*z>Bcf?BQiOHwSqFu^(bVL?8q?i(_q=w{fB$%aByPPL zXn&;CqP7^$Zne?IwN}Ab+~fvXhsRq#Z~)nzCVt6(Yx4TSthmA;yFL^^cHB~qwv#@^ zgoBWT*UbHman8i1>|4Pi}Y?vL(LDwI^ z-PvkYhD(omT}(0pH8d$k8*a?_v&ElW9|5QoLJ8RwsBi+1+~r8ADOGV48LV82tQ8V| zRw=J8zegZT4Fg*MEvV+mUu=6aH^`iz?#)1$)iz8*vbmbi_X*PEn)|!P2GC0nZ|C#H zav% zqDayC6hWr2>|$=S+Y#lIqLI7s?C?LqNJO-0#yQNTh&N~e`mXF$0t1A<8z_EOmm}Zq zA0qq~ojE{ccB`U$L_==VvpPAePR?JRi6FZ(M_%nNg6kCt9TR zSv}6+l?qIyH&Q|R%v@)k65kd65;2bB5^KMcM0#GA_Q3s{t$s{rE}1wRz(uV(?z)0F zvw1f(J^d%XYe;iqi16vfBF!bD(`%!{0pj!^i-qhij2v#Ntq&7Gj1sJ@_3bhsH8I6n zcY)TZfFk3@96hqM)bLm_uD6sNHh{8v%HeK+1b7Va^=P>y!37T|dcWh*n0!za2-K}{ zJ{+JhdnfVm(m~I1G)3xr=vz%wh5QaqDKk?rC$|m;SR(0PmcHI0A^Sr>y}{v?Y-CyET6`cL$SFzP9C*d^89Y8c3nXl z6mfNu`8e>}=E#9)1rcGVQ&?Jig>bT;xi;QVcLC7nS&2f{t_1ZF7#{$>kX$qnHox}0 zUKM|AD9po?4B~2+*_oyo#xlvs-{LKT?P-$DjF>VfpkcCMzKgv_jg{5*sb7%?t_DA@pWvcG%OTYUCJcW!8+ z+aLHL%>Dv<)9>%@qP~$Q?T8=;S`?>R9f1EUXBM!nalbCs z6ZDUF2~nUd%Sq!3uUCc*Aa9S5f5X^N4!LJ6Ne0Vy(%YJ;$l;2l5cXrm2}W*cziyTZ{g&AiYw)i9j)_cKG$w61*bp0}FkxEdli4#ss$0aNenj=e<~`9QJQEYI0;`xmh4#~DJ6FsV|bA&CZ|ejb=%;AfApsmio-D-xzxGvpA?IlQI4gqJDoyLDl) z^X`t76eC(Vd%Z~R>?*j6A)VhGL4pi5Gr8tKB`YXh){U&brU7vgQiC@`Q&U!H-N_>VnI)G^G&As?wTA^+r z1jLUF7fJvTkpAQf#$8N>S|7hwi-)~g(~@38`jakNB9B5W-fsOUD##3{1KCvq$>-H-SK zmbWOVp8y=~PaapC+zOE@D!QW7Kz|O(nnmlP1`b#j(c!RFl&PA;DCI$0zl{ixKFUd1 zO8I^SYC0hepaSHR3x4hbW-v|o7L;JksSr@!Fz>uiLFgPp1Sm-HC3*>S-=50_Lco;v zYupXVKYuM7ObzP|s|`mZZSrzd!^j>O-J@cCa)F6lWR}1-$B(b}1cXljX-bUO%BJk@ z=eX>xm?J1~SsGr%>pYS?^Mw5xq*@HOqA~hf{oe!l1TnV`Q2sYu`jS1W0_X$~Sl}m# z+cCmr#A83lMvyTwAV5)~SH$1`*jw@Urw+>^4xQjeC{f$ekw4+5^^<|85@gaD2X$+P z3SgA*S1w;Osbj7n$kYU710%q1^>yf#_kLSDNZETXlPC`4y9VN)<1RD_!|1NeV3;uI zf_qW)<_~nX7-!kyRlSV6l+;9(NrUo5Ts|RUG>-1o!AnYq_cD!1@1Fz zivY$0xKTb@0s*BJK`6QozN%+p6B5J^GjJO&`P62Ghmjy8;i@Y^k5}>5uZ!$L2|kA? zE^fHc40O(IKBHOeR3D(MR+(`Vswv{y=}C{|OW^M4XS4!L^?$E^#HyJz_$YU4glY6%!}_6 z@Ph(=1gF4{1JS1h%s_B7z98Ti2K@4XUmFFt{1c!HgbCqF>>H_MP)=?I75Bbj)1b$M z6$c330)>l}EK|NxRWfkH=RaG2XIIg-%fSMnYnmUw#XQ-P@^<~t0wl@2^xT>Me*^0V zR@T?7SOD|?zyEw%hZ&c?pK=y~`Cq;YQ$NvdIqi9Nu59cE?B_Q*4Q`J*ufhC(NxeP$ zlM$PdC#%`#{B8FZ`Pm89ov;AwrTG%IRWSJsw`r3uekkx)X|zEnbVpwd#z>6ERLsUg z{D3vsgdNz012~2=xP%+HhbMT2KlqnVUmpY+!N4B>#k?Sd zi#x%@_kK##nBGj%Ypmul#Jm@{@Wn29naf}4s@AZ!zvD~v#YjxWLZ4=9#LiELqs4)0 zKu#Aa#1}Oik)-%59F8c&HIZo1$H7lO7OOXq^~2Uj$>ltg|6V#V=^sgf;2z3nHHCC7 zl2i(oA))3<%@J7dN)2CZsbyq#1~U1l*~1XC`R+8cdn{!miM1fk*daa@_%m>buZJa~ z8v&q9B&Ewe%VC?yYGT%E#O#ZnfY?{Al^94=@GXE{qQ=+WKb=+*1h5>eA_P`YQ1rx+ zOae%T zH&(~E6C_ImL0SkuH?3xx z1L{)&flw16i(|t5195tA3lRe>YDKrpEQ$aJbPx(eg3Ro z^zzxh(ud~q>etNm^>3crTi-VCcl`5w-}C1OfnU$6e`5>&ozVXy3}7}w2SvaHMZ&cx z#NncG<5>(o{EH)~vIJ73mq?K%Q>`q;wzkzd(zwk|JlGZ&9&fvA-3t9MW2JuO-^$$O zf66^(Dm+>FAUG0K{ZQb{QTG&|VJ$ze=Upc+f;xNA>ingLb@682QC+_Oo6O({(H{yE zM3ik)o?v3dHt~5*>?Szd{2;j7&J*somxZ_ObqU|jwJ3ZD+_fKrI=dU{5AzrWJ^m2kA2xsC3DycOvjd)@wdGhI;BAJ}>3^F~B3(4%lE+Xekzxoi@c>R4bgSXSJ z*;DEG6n+mb>o#(Yov734FFi)Ri7bYUV#VMnHkF~G*l`#dii>d1P&|1J6U9fsuuwvE z4Ns)_;Y*Y{QWnbZ5 zODIQ~5>4ZD7?{&zGz zS{thvWYg_u-f?UGaNoEqBziFxTt=a;W$Ieb=4{{zH^~)yk_~%N%wXS!xo39APPdO% z94!((+L*A7Dcp*kMo!}Zu}Rz^Z$amd;H!)i2*)d#sIClZZAf-1ROeq8G*>X(!SouNiz{pH9qOEF2;#E*>#)9s2YeGZ%zF zVazT1{P}8iNdUw`t2O%qi!8SKHLPWA>kt5iDs-7~~q9w~#tXi{f!=^3U8nSoS=k1DkEZ&O` zwIG$CvZ-)tAr(nQQ}xt*&SIdTc0CQ~xld4f2u$FU2gnl!uY$uD6M`=z46h>s-&hfa z?`yvy(Y9xz)hgXXag;`7G)8yACwdYlagrx(19l1rHEuV6KD(LrM_`*^BoiKMqE$d$7(cuwj+IsS#92(n$YNX8LXr0Q7F z{aWDyLMRt+H;2+#ZX=HHBH=HHSqC)jvZ%J)Qf-P6^xI0HBdx0pLh9jzFRr)CH))2O@m~BV)0NRH3r8Hhhb(%-hoI zM>VZgk5HK!e*y-nuWD#&>3|FdlORw=fr*La>JS=C)4s;oP^MIynOj)djY4B^c!HH@ z01+nCG_P}zrq<&zSYlwA6;@eeWStE**|g+0+9<*659dD%+7&F6FiRr-J;+R+_Eu^zTI6IVcnf-p=$;VuDN-39}an4<4wJqvSxnIU(yz=yegIE<@FI7K|r4 zqI?plT}?F7V6zwuJXL=8&HHkAqqs=JFtU52iWuWaVG?PWlFrbNp5j9UPtqTJuA_O8 zzTEb|aN-Styld!_hz11!SQMrNQ!jxj%tc}9C9o*m2Y*dvdN)>HJwu8}yoRFfgz=RZ z;3&&N4$eQTu`tU#Bs0o&%j`nJVZVojn}g=%Xhai>6z7C@6gbN~aT=Uiw;X4KJKzjc zAZF^!+yc+eDxFWz5pcvgDBkRZkyQ$IEJB0|+50mIoVgF!CRFNPQt$XOtW3S0?w=WBY&@uv{AYUidK-sp_j*L+vPz-GN??LgjPBH_eu;U+%m zN02YcI+7%xHHu`=m{P11AA?e$3|e_;O08T?rL_ljk7#=B8eb#Y-O%&su-=DvgmxEs zoe>w+Y0=WV?NICJu4>)g7ju6Pw85V2{Zua)c8h~cn0>w6JKEoF?+qT5ZioGJrhoI_ z08fLEAz%eVMg{TEy7&>gtH1#R85bvf6V$H}`V}Q!`z=`+gIH$CFp;@V@!?U7gaR~7 zDbpZ=bSzt2d!zAV6d(u+m;udG%=#UQYPjd@+msC~PW5A{$kwVW8%1_d^_)VW#B}T` zXkrA?7|n_HuB}~b||u4>^IJ)8e12>ZO-J5PR#B(;30S=8lB{HI*QP((Jt%;H`4vKmS&Pm zo1#ET$tcBomL{t_S_M!ErLvT&sjQW|%}J0_E~(Tzh^;{2fdJI}aU3_B}v{b7P zjh8sqYP#ImWwK@0+7~*gag)POHQ)K!xw;HFh>zfz&g)p{jn+r1_l16v#ea|~P*A$y zq+1~zH581HzDL1mDT<+umGU^4ApJ}nbSFu24^x7DsI&U3x)uz2WAA|Xm&*M(r{nD#H-GIa& zOZDSPH<3(}UEFDxXU>B2;DW?kOu8i&^Ri~wrPv08o8XoNY$y62g~ja@zMP_+)&_4h zJ(N(%jF%#hLheQBx!}&L_lhc%SGMPlip1W!H^&G%IF&|)lSYcAk2@DVdfGx)IhC&6 zKZ)i^JNTqu*Hocy6|ctzPe2^+r3e|faQ33IK?eOqu3_2$?3Gw_>KptB$H%ON*6Nav z&LyWkl@lOCNlE9P-=4}jklfD;(M(3S6|s9IF>R$*jWh?dwl1aIPzFm>p;$<`6XmW& zvEAgnzvIQ3-?kn10m2I^YWj`Kx=HUXRx}pTS1htrs+y;S6pXwyVK?|`^R_uW@PUvju~-y z2^Z*p6w5*H;Fa4GyAJK#6Spq4yRT*sMC_52J(j#Ddg7VDp6QbpdhZu%zfyTg?iHCo zLPZX;#Vey?nNg;yEZHiQBbZ#tnj~)_l+rGFI%u8NO2*KJ(+`LAN!EcxGz8X3n(?IF zn6M@=*ba6=n`z)`ZLaZh@ujpSY4Qo$W#AlKtxT>hueP*{uy8fF1npXIIX((ETJy)* zt)}I9uAJN3((RUhllBM72a6v+MO9srtnEW$#%2BssOtSqg!x-$hLK%p`^5p_#xxj@nW`=((DMq+%VoG+2ol-45 zxbZGjzHiyRB6l_`@`AQX0|}k?A#)2eDZ^^z-b;P0CaQKu>Dm_%+1`Nz-wSVTo zgarmgcMV4exZv=R@q&vW@G>0U0;~}({2i}hB`OV8Mbii?t*gV8Ekt_H$Q)bk1=&q! zLiKhG%>wDFwRvm438(s&ixgI31uQ6erm9G`@O~64_QvsEd;?P@6k?JXQn{6(!wflO z6;P@Q14u}ct%LwmRmXLh`lU-xJJA?=xz*3gHQ2nB;*>cd>dfHkOIdTX zZ~;PP{H;_uwHh4EP+!XYgbL-SAyba`6M|kjXI6ej)yy>W^9vC-v+}p^9^~)%e`Nf_ zlvF5* zl}c-LH9iN<(FY>eJ{qSooC|%shnM-YEk}o0V!QVt)qqMn@JOy%Z!aZyd*$9m-Hzna zNc_D!HRA4?HD!Wk97|@|s&muowdYS{*vZ7zASOF1l!Ny+h~F(x5N9V6gs8q7t_dQjH z+$(=;L z+ZD^_-3h!_)L97x`Of7dXDznQ7cSqnP_2M8fk5ET6}R?GTzn(lFgpG$~ctqpFjxz0tZEY?Zd>tp!$0!olmq#QuwOsyeA~7dZJk~>64z< zVmxxCF)y_uNy)d$ct8LQ_Zk}>koQaw5f$h?-Y&*~=XF4b*HI{BzJU+*4v2sl(j5Sx zYqz_itE=}I?V;Ft%;$PO)InBx{gst&?i~SL&B1$0LW%)3E|P$ySq5loKneh*eVsm~ z>D^PqhDUGAnutp-zU17CqT0fevA|qWTdE1sG$py5)@<3*Nl2?|R;Ri6y!MmZdTuA{h`6lqi$)p^!r!gKKPKUPlqa z7(fPmgzBGDqoo1H%91$rFkpybnOqi17|Pv>8C=%D5TCLAuwy$9TTGWeHKxUG8B#-uSY%d& zR#vQ(tJEqZk=TqHHiL?qm}xibQWe8k5vDpylOolWdg6o(kxB_8B}7daB8}$75Cy`6 z?@*zBBg6#d(VCAI#{LZP35Y-t6^M|hF_tHfSsk;FW?l49qZ#~&hICXXFvetmi zegRom$GR@Y*b55QEjmtoVE_Cv2+^sW-Ge4rWC<<1W8qQWz3N{9HcD@qYwCFc_ek&k36JXn?vm4JsHy zRkf;G3LA8g49>!xhkCrAWj@fMLx&DU)lg92ca!`R$lS9Qvqn~l+7hnl#IzgH!camI zm81*Gi%3}n7A!h;1cHkQBTeo?ASw$I8aAP}*0Z5$n|24>1^2*x@Br~avkqeNXJmt0 zs1B4%7)tc<2=eF|$5ebENzjIZB(KiO8xfLt>F#=qQBTt~OO+%lvG3=8wI=!JY~kDA zWQmmYNC76<97q+js_K}@;f@x4j(BwHz&drbsOmJQ?ii)+f;EL6h!-;Mts0!klYMQX zXG&5w2Mi&0Xl$cg#1fyF#yi+q}xW=^8MDMe7z8W!nVJpd%EMtkLGC;$N5Jj`2@ z$w}fMcJ%l?01saE^kk8Gcy4t%t0JA~k8;Y2tq8pGJ4WFisOMAAAg92>jf0>HZ6E~z z00mDLVjUj7Yc8lqv% ztXUCMkytD)7FWj;so5A6B#8ss(N^1UXj4R3(hwPLIwv#lb#~sLyzy24SaP^6B}=1if%TkNL6XAI|ua zuX$x^4mev3w)@~>8VtwWgy^QM$8rmhEmk2#aY{XL?7dsrpnqby;>dIR(FF{V*D44x zECPl{N`~R4+lL%b5Go8}BmjAp!XZE`@QC5j?p?iou=G|i@TPk=T4z`5uFx)q`u^Cj zKHN+5SFB*Xjkd59dSVYA+Y0X5Xo9o@3*e*166SHf(NVRH3MXyveimlpy z8YOPRBJYUY_UV5SN1mJbtTSd85P+j(WUTEtqNX3+z%qc=m zVk&8}romJc)RMx}L`^IFE*AniMI~*9q?nqD-DaT0QY)Nl`E0^%{>uqi&=0QsDJUP@W1RF4v;VQQd5lrbYT08!HX6A2xn!hAjfVDHQv z06LwanY)^a3$e5jk-m+GqZO#Iw-FIhd*4P&lvX!VRhc$g360_GY~wzW)jb1T61LmM zCf{vcld#917mFHG?6##HTMJ}OSTQD-?6#9hm?VfUSPn3UK4?vGp$U4xEzfe$#e=%R z-+JV?&fvG0^d9EckmYWBkHvZ|JtLWgMb-xvjAc#0S}-JZp*gxWL`ITz(ZrKL zNR2*J2>=YyE_t>D5POUuP+^H7m2=-4Oh4<3bJ|@5B7u=J$Q}Z9mMK0l|GV_!Iw_SA z?HaNF>@Pa3EUtYmC>=Y}a;;pQY26G`4GrOO`|HnC*vV7Ke?HE4;irw1W(sxF!Vfv4 z#Uk#X>{AW<2y{GOgjlK>)71>|`QS$FETS{=JcsnSDrLq2`pyR5tjOWRVr+qOr`Lvk~iE zIx=;ngBVd(G3qE6RXK4p7J2tW{u)Q5Rj8w3I%*aIx6LncNzWDG$X3;>F4 z2w^s0q5FVnJpi-s02!d@py-|GmpD-_DY#V87tsp`z5ubTd4MS$Gb)@6nDN4-1Daeg z`+u$hPh-{o@_2mCzoGLJv*yPK&0ACE7mt{6rYpzFIJ@$U%A=98YdUz=bH_8rfi^w+ zMEkd=PdBLEIUPE$SDOs~D{%WH_TP-ve}dAl_O=Dtfgb_VxEq}T^A=` z`BQ^|wR$sAoeq{SY^DQsVL$cqZH;XA<~OZoGyN96rQ}aawY-t zdKquDPH*3&cIoA}uQ2=9X;Y-V_p^Db$|}-p>?Chq+eB9zToG7B2(b195QzXPen>F; zq#mmUfIuk_3r2}gEacgMXe<)dvz_k_R1dats>)vM%~ciUIMVq>z+RRF^=%n8)`RL| zP(9KLun}v3L|{91fHGnMkOAx;a+ySCNPj6IL-9)haq<nV%Z{4+Y_DfE1Q`azEaP zVD?a%u+d2nF%$Dr!wf5nh^Rhi+SW&%^?D_P}TEAb0yAg-w<0W@2LUaJMB=c+EtlbKzPgmzl^-;;Fmqq3l2O#p0vNe|Bg5 z`*Y{KFLoZV(Y(}h0|oBxq=W_TcA1HLcEP&EOuCzinV5)D*_V51I3W)1GGUV$Qg~Vv z4(zT5Yak+;ApJP14!uTS3Q_;P;L%hmF{W*TSx1=kfeJ-hLHq1m4-`z&pR} zg)xq?9J?I$$Bbjl;ux@avBfdqIn9mO*07Hud7ll96|Q&Z-R`^pc4D76wldo5C6Xv5 z(mDiCbMhn*OA10rG8vkc5+R99BF4rkVQxvD>g#94OM0vX7|Pr?uSQ+Pv1RVtxv{(V zpI%BX;=bJn81~ri=EbHNyLqdLi38)EuZD4D#K7O#@rc2`*zOqPg-S&R-MhK}r80*wU>hEp&JPN-*zwtjtGLL>ezV{fy~6q1k1jB38o`4HO8$mHqLnGIm|dO@@v;u zOPm+^?GH{^{XLT$OtRKV!_Ic#hbuZIcpP)iGKcXc%m1i(i|$!KBnm(rK zGqRzdv$E_y35A0@0(Lkvv-Z{pGn2j>PJf>}3eN(X@K<0C6m(iQ7P@Clv`Cl!zhNMN z#b6)QjOdA`+jD-t`sHf>&+S^c&}PuOBe!CTI_6Hkly#pupZ|q~k*PY`c=Rk?YByxV zu{&`kT?=R5DteYK+sI5)MVqvtu3YIbY}1K*31vM?m#2k$>RY+?|4fB~X(_MG%U|M0 z9n;A7d0z_uQ!_2&|BpxE9Wk1wC9ozKL)u+)A~Y$RCUCE^! zEZK7@B&%U;=P9pgV(%pan7XaqR#T@Q^qI75-<7bOris0mf|jX+w}h$h+HEy+rbWLg zD-K+X$ZMH8cq?j~IrdRqIe8nV9&F=1cdpfdX=@JMh$?8CIr=E+m^<~=fl$XOuMm_M zt+9OA2*@E5gq;iKf;XwC{rBI?m6&TcZr!<8^q~5Cj5Wp+y87PCYT4A9O>(=-{xLv7 z3}9vm8z&ToNHSr`%7+pbm5@Tq%44#W@K#ktT~k|E&%oHkEEo4rh#C;tvQ0(nCzyr( z{8wB-h)KvPsZ#UzKi`ZF z!~kZ7uyI0RZ-R>r2_H&WR6+_ZEB|H6=V?l)sB3EL>KPcDJkQEcBC}{#KxC7Q(jG0y z;m7n}m==MJ6AD8h`B1_ct$(4|gcMp<9;2k9u9@xnckH&SXJBk%R*RNE9b_{&kw^Z& zy3?2z5{1U#00ME9dT&~$P-%1qlf~w&ZtqWfe1T9THk3$ZdAa^NT&_^6jB4EcdK0!m z7kueDcAL|~;vIIvZB8X_I6j)yySU*zyaGZZ;*y#E|H;i~)5;Y zhP`L++Xr^r?%0{Tv$005wKB>or#uTRl0-5oq>3g!(Z^Y?(o72v=;p5o!i4aBC6!Ea zDySp{8Vp!);LcyTc)6-H1p)A-F9b*ce6>G(m1R^D6-qSd(fOZmZ~*Bo{#!Enn*RKZ z`LAh_E-UL{M~w3;d(}&9i7&t8W>D|QV)E`2w%SJ;PuA#>OOECH&%I#l>XGHlo?deEox^jQpp6iS2OEB&C7=QyTU$l#k57;XM z7yxf{J82tTCT|lSrhN+-fVBTZMK|+*TGE;}I{AMg2m&4$P>=*dqH_#+cSoyNiuOdU z#q;_lJEi`Qr%Q>gWE1bEVvgot62_cEK5?f{Rg=s&+2m79Ibf=(r&-gQ_qk9tMgAKf zE%#y;ySN!=TA!I`nRV0GyXR)hCX(pWvGRY#F9CHgxD{D9ci9%xlEDlc~f+RA9N~1HFEH;PB<3j=$wCdE0YtX1k zvz9-d^WTrR-r$RXGvH|k!4Op6TU>1bpEEv&s_?@5Z|hzShNJOhI-4(+t949(1OPH9 zpn?Vn1T3vwCYWG>4NmhGEnBq?kBE$ljtRuZ#U~^NvvctL7iCq?7t7VU6*XaK3>Jqc0N{_#L=u@orO_Eo z7MsK6@dZMW+E%>ufXEd}m0F|K=?zAc+2Yrqe*h6Cl=1(BRH(I3%fmO^rw^Y_dD-4B zw=dszLey5(3IjMXGca|y24ekH1kvnYx7|@hgC;H7bm-Ef&wwE##!Q$pQ!0pOiCH6N zi@Ek3)Q8=@aVC{L0sMZX6imVvA+ z0OYyy$imR@=c6FhK1bA9;&Vk=)oRLv zz0m5UDur66)EkVgH?iG8$}X?Z?}zGRq}F7%z{jfV;|+~X%`L5M9i3ghef)C(|U&ifXo4tx1|uhc>J0LWkM` zc!epK>J5)#nN>#qe(Kd=iw+QBLO&T;VU3A(HaX;_FMIhbUiBvw>~-EDvHQkvU!6$L zvRc7x+rvPK3=uG#pWGRr39EG+Ne!Vl7{dD!eKEIZTxRB2wi7zzb6>za-R04GoIyOZUf=FXybcR_oeRVKI}chjuG}gVJC@m zn(&Y433xvBLh41m{A-;R_X>?qs04*TVNeUG71Rc52X%lt%`jk#5L*JA$C~BXX-Yps z>F3qbwL5}NUG96}p?Z1F6HgV)-Mq<@p8S-j_DLZa|15=<0b#Pk$|(N`Xuw2wAngC# zg%Eb{oZH0y7kiHyN&kmJFo_T%lwe)+|1Ub0xRO?KZf_ymLcT@B?fLx}{CgBEWuLRcsh;%Cd%PJM8ybGmPp^p404D8x*zHmf{5+hE6Bq`El^4_uZ zY8ezmibd}w^uHeGFLw6l`uz|7)lWga zv>jou`2nc=X!e)?53tvKr^>V>$Zm#%kNt-dl4SY1=qv#O^v|TofzJIg{x|Jg#?{BD z#@*k2!8sVB0rpvzWrY3sr7=ar%u3)T2ifuZAg^u`{$>@<7nkMZi_4r7m(zff+u(V^ zpKCfQnu#Z64y(Zz??^rfeI=jdqv;D$ZOwhR%su!0_&Vrq50e}dWw>3;--2HGx5;&9 zyV-4Gvp0&$K;pk9Ad<)wDvi!yvOowNg(WbOs;wnbnags8QswTuh0E#o3*Y|g z-RAVLc!!x-SUI@3;XJ$ox)2nB#u16-=JuGFvbBvhns4&+KTZ$LifBc=;#QU``;}tl zdF6A3D|aw6gpCslLm>H30GKV885leRQ>CSS0EH!xX-rD)?d%;Koep4(;KccS4~I0T zPKZ{l+p^z#01Jge@j^)^o?^Pi%)Eq=OPOw#xfWP-@wKjdgB#s+T@Va~Bhgp_BdIkG zV(=s?gRd<bF(@Ni445%z%lYW|#O`wA9&ezFP=aRE54b7x6O=?DiHBg4f^=O{2Qnq0 zj4qj6VxCe;oGCM12xmsocO^(7IbC?%v!qwn&O-DM@lCbNl$TmQowYGDrtd^6tgA3+ zRrY41m?fv!UgI0&J}9*Kozbhr??YXc=TfD@bdhge*EkV*jvk&Xh=8$~S?&Dr)b4n?6`?QzZ zTvDsZ`Pb`xx3osTfINMhM|u|p(qG+48G`{vf73d`h!C)KMq0WeyC21aa1Wz;6wTwS z?C3UN9Bz8H;$B!cvn|-d4;R~cVmJ0;KMvwBj&2?&nKIU9w5*w(uXEXo)v8vR%Tc0E zjjGTJwb`UC31;9ji)0Qpk6FMi5^j)gQf|?1Gum|>hE7wLrQ6o)=yUaZ27F&`(7#$? z=!xMNiP0E~@tBCon7TQgPQ%@SxYvzvzx3LT%frBfbUGgTx`9XeOg#2%XWl2;NB7LRzLzJHkeu?&5j6Y)i73V*rWhN{7{QIlS;ft|5j^|l5Y-e9ospzckbZQ@#U3MYjOQOMWQ=ox=W=8kRCGVQCezVx9tL# zHji9!;^xfVg~zpPf7jZxbpUNpXp=@;blPT;t@v%uc2qbVHhb5m&+eny*oY5#9OJwq z-#cI#3R512Q4fuejoWws9^T`7dA~K@UaOYtgOg1C2=q6po=|ePE_jqqt!gR<7dkaa7)i4}t z^k*|$+0G6I8afk?L94xcRUGVAlmCmvp=?LLYcO6OJBFGt>u?V_8w_6O0>K>9_1rq2 z!1DN+-S7~H>Vq|V42cii_O#H!Y+o9-1ic>f;u8ns;6%2azV^nqe)H;&c=2@#8^sC5;-r&PF(>~NRQf4Cy_I=YuUd6j zGt5sLd>X|K`+_KK?8ZfT6QWVwqVC^4}b zCn0u|_XTm8CM#}p@&^+zPh*0%X;0N>-Kp!1rlUXVC(y$F(kwZ^O#fiREZbe%J z4B;IYxvmo!;yW!-bS1F$cdn~nGdQeupFM+hZVawnMIjsJP`1#2ji$}*pgsD&2xWXA zexNY)i~51agfIFB1xc3e?rwctUuxUF0uSKu16{5)%gu+Fnsy>=cX|M!KM$7F-&b5> z>eP!f+acS4kI&T6)zg-qkEXSvFl=~e!=zgih>JiC>Ej7ehL1bwy;iHafhzjUL$QSNI;i1 z$E*3A(ELt4QNRbz6|4e&Z;|#$sy@s(DpPiv#*tToTbA1;HAUKD$Is6##C zXn3^QCG)lVk~1y!`x@5WZg$Xg00|gz|I0tU5$vOY0j6Pg3EZ~42Le;XNq>#*M)}%OW^&jtUYu^2P z)VlZNUbdlaw6wY8&|li(esBEQV0j;!UZl-)eTWWt?$57--rsi-9rdDq)R|nt9iLy& zWj=zDaa~oMwuZp!0m6ppjGb{}&I>u+Q__3Sd*W=N`@g!!$Ny3H_=I7vKJE6(VfV^W zzukj8_YPyVqK7T)5I)W&K!|YSUxAAsPxM?hZx#v(_d6s5 z8QzC1U4}gIhH|f>jSjl#V}K#Xn1pGgVm4y_zQ>~5!YNx_g6t50Se+0aU4pA~Sz#wu z8LwRQ^0RVq#ECkxT=0JUaicvb9(tfW{hWsvw}k<=dk~8&j7@|el`W~{LcG~N-=iYetFpcpJD2ca06SToOtVeEaR(lL~r&PNIpxxVLuzGJdSzNJ z?RYzf!;PSvM5>gRL%f@h`8Ka^V$Q5daJoAo)HvKgDDQ?Rj7nM|3ea?P`-jn8;b z%*0OI#LwhPrLP#qi&1)_hO~O4zPckn2@^dBY%-$JHzTqn%d;|TopllL%L14oOlWU6 z_fRC)cDp{0bYpjSf7giv#~@xQ02?!6V~itJYbm6|t1n}j%6yixlk+t7o{fTs;4GXw z?5JaoJJIBmn!!xxHQxm+Xt6^^%v`wsMvHfNtqX*&D4A2?Q**x%A;L|iztQK1U;L?6 zQx#JOlIdt2x);3^{Q>&&KCe&|x`f)AYN3rH23@8sIB>&= z8!vu>gsG>E4!Y=}j{$}lVKz8CIzD4k_A$#Mo9uGPS8n;6!>_BB(;d&e_Q6-{-0lI7 zd9E=JJa+9x+!a?8Bcl_Oc#2SjV@>=R=W&s+Tr+ZHA*-nz=0ip@mgk#v&0+Je-Pk_T zExGa@>hGv!)b;t;zH7Ut#|LHx7Dl4`_woOqBLsK>WU#?cac%p!-i>TxGh5oq_KG|S zAYHbGW6~r{%4AK>)xZh{HG>4zqDP7hzUDu7>+!Ot+p+APFSi%i1y>RsE)Aw}s z$KKmjY;(DNf~jdJ!f$D!xwg7WCyRWFs8RhI7X^E3a6>pLV|vV3azuk=FoqH0w9`p9 zz4SB4FyjCa2p9y!Yvd9w4EJs41C;R>4Jsv#x2;;9p>kDq)jE-cBoOQ7n&IqgjPvI7 zXO`3dL#*u+`MZA#?=07>BRXuSA5(Vnolj1?Xlm6pJF=#jk4o8_@r*4P8iCl4pYK)o z(60>NMo-up-gkeg8$X0v@8(}8;Qvw`-hw<#m5Qc3)zdu_)#yb@8uSLYHtj*rcv^%FMvn_qju1lB$j<<<3j)9s0~kMHEKbJtbaD#7PN(;v>zU5_l4&1Y_1@?Z zvq7;L+B?HzF*rWs5-=f6^+_p6MO9iFl2(|t@hXfq+GL|lG|74sthUS_gn82}2QBt% zRrZ?Ux)uH=!AJe11OpkNfwbTtGYpUu4#kmB)*DKC6)BZbGM-e8F)@;OR&fZool(1) zwv$OGIdzd+=ec&4OFygbM^%0Ab0jq&tOg90>1Flst3p&Q@;cDhi$Sg?@ic?Gsrm9} zzA-bPhgLR&*@$=$MpUMhboxqJrr*l4%fe1ehW$TE@;|H%Ljnaie*AUybQ?ey9(cgX*A#8*w=$lN}Z)qBCY2V)iqmIVV=2o;tG4VDibR-iKi%_7z^YTa|NT&1zT@PVmhn@%o6-G0G^n5@hV zHw`rvQ9!0sRJt{nVtATFs!d8N(omP5;}&{lBK-MkEXnpV>mVB_up9(ccbR*?T8OQY zCR*!z6RS@ZUvu#_PexH+;$|_GI^&@$URfI+I_zy>ZmpR?WS?ckM;R#Q9!AtE>LnPu`AExlR zEC!iL1t8ERGF>v2Q|{Fa@4tIEFBY!XE~t#Bg~d<}86c$&0!Fg)=`-m@3W7*L!=Vk} zV4+G634~}%xoo+_)EHnQRyXPQUm5p*=5PIgz$oj{cdd%B&+vQwQt!9>bARvO-4`De z9vl`C8re62^;z9cBWMiT-kgkXq;2aa+V*ay?dTTT&Tggc>Mq)Mf3s(_@4JT{OOp@Oie8ns4f4-qjM02?nm2Nx$d55EAPYIW+}6pBR>sX{5&nJto) zM^39Ty+Ihwa71jPlK3(gUP4~MenY%Q{fJ zI`7UK2hW5!7XMnzHFAr)r+B1#rg^1znrD87cg*L|_sGw&-xGhQo#$J21~>;^fUh9e zP=6)hNkj^nMrF_eCi_8b4wtV*9f&p+2t{H@Dv`^S3bjhB(d&!`v&m|)+nf%!%j@y` zf=DM+w~C!3H;&#qcIWsLzdzORO!XW7FTM5? z)*rF_knP9q>rdfp5;gQ3(drqUUJ06%kjaUd9>4LK7-+JMK6l!to`LjGL0vup9UZarF%H^dqdy@A6JaRPh7)TbVV}W@JcpIQhLypo9Bvixs`R1{m>R%X zKbD4YG}dA7k*a3Z%`4i!k^@H_ee7F*YP~O9`1t#0|J^&=yd4{J&Lx*#*7Wd4J?8$~ z-kY7_w5Mx=L`FYw|6hG$%~De?c)s(W^PwO2gpcVv^#?xcQ|{q8uI}nD-YW52x8QFR zg-j&bDEdWxGZ+4BpterSo*c^vo3tWLMaTm72pV%7jvCRlHqd@RrJMt2?C-krbQHLFgF6=}M zVQ1n9yNvkHJ&-imjWogT6KR7zU{BHodmUr~_NG|EK8Gc@_Jv{v`yD=s)&)>9;X;ZU zTtq2^iz$_G38e@wrBuOX)bemSwJKaey#-fNE5lV(6maz@;ZY5gb-0$|57$wv!1dI7 za09hE+&EE=;U>75A_lh{)T?kSWdm-bR)X6p@^AxCJiw~(AdLVXVo3lG(-IzG1$dOT;W1jl<8*^3mA4F954ocBy{i-;fJ3I1N=f*;8&sqzY#9@oiYi35C!;?6vJO6 z9sVZS@DIs_e@PGgN6JP=br_`&fv_e*ut%8C1Q4m!=NrOWh|&(T4xtO8A_&obrMrJ( z{RoC420{;f*5R=Vp({Q|Fk%S<5F2s$LKuWNNI+a+4&tF6@r5x+fC3~GrXvxmkXV?D zFVTP`!dN8j!YU47b9{|)d^2oX(Z!6~jm3m5ksOmqA#8z^m_RCF2c+)xst;j1r0vz* zg>X31;|CdpgOL$8$RzB6%s4<6;SglSS7a0R!*|$2c40T<=<6O5!jZ^@-{gMDvB+ab z7(zZC$p@T>`~(IC;8YYOXix}FMqvVnB5)dt5)3E?XQDX4K?%43B?$>i!Nn*|-k=Oz zi0{cOlqIAn2bZHfp+p6E5*3LQD#7)rOqft*<*^R7SR-!cV(>~%LuM=u;9b-tMyLhv zqc$-`9e59Q*O)lGfX`5$IH3W2g@(ipjo?c(Ca!3*@`d3G;(})Ib2KNxXaPS(OAbB> ztcxIijMkC>v;hg)N*d7a5c*~}HFm{!Ff|gAOmxCabe7bk3-HnPmsF{p0z~Mxsr7f4 z06BU{I?xmJ=q2ez?}q_>z=gh&N%R8``b%ao0Nfb3nc}d0nSFX9I~~H(fypLx!mty7 z5&y)9O`M&4jCc;Cgq|3kV;uw04`Y|1+%{o2#-B_ADVRvi$0Xu=Ouo#!V#|hh12QUQ zm_}@c>B1(Madv*{<19E7v-u3y9Pl4tE(ICpQIKH%a<1yI zSV}yOWxq$l4nr?^1Iv+UV+Gz})~hog1y*zP{oQ}#NV-75{o@& z`nr7A`r zbhsrc!0pqS9TQf>-7!=9Cai+{W2rybrOkT<-0?`*29L3fC&FfUiZMJBj=^(0@Pc>- zFDbHkwLGhP*hWszv1MHyCZ2BmhF|>tJAG_$_KFes6J+7-W#j8H!}^Q~yWk&C<6q)3 zyrWRyKcP9^AE)=SrL`^;Ke*X2?ecYlSAhLvh0uIBq_*)Z<2R*Xe!W&Fxr{*y)j5bmy+7+!XxI4V1B znQ%8@1rK2p?ji5MOV~g6$l>4&&oLT(Z7t5*pN$iCr(JLFF)^0#wZV!UL<=JDIp=Rd z$S5L2oJ53$-x87Wv7c99k%$djcjFl6t2Hhi<7Ok&w}X5`q=|(@hWt$44@cP&<3CSA zc$>(#{>mPgkFyzVzwU>~PL$8+T5M6P_bZU?R>C6Bmexs|iP9w|qwTGf;teB#gwfwyxO= z-V<+YMN)7ezP1~`U`_n7B>@|)NFWIs)tq1wVjZlxq_lUwGAY|hc&$=m1Svm}$Xf4m z6eN>q5=jghB$hf7M>C11l_dDfcLgiPNzzs2{&?m|3Z_Xa*+tUG9+G~Yd4iF1B$J#a zS!5*1u9c{BsCB$^slGaSI!&?*Ug94q1b`G3r zk;*5ER85cy>gxV^Q*%BqNbSKLxos1nAF2OBAJRY?M_5gaiheGEijK5UF_1PYX7Z7W zjhxQHCw}bvJS@yH3Ik@=iRpE{KjwM5uvy%_44XM6hGFv>3s~P6RyKj9O=5OaSl$fg zH#A-{J! zg71#uz7u%v6y7_7*UsUw8#o7$7lhzoNC*k-A)_KV!a_wxXh;to1!17RXDAL6u|3D9 zu#p-LBEm&-cu0&8xe*~KVwCn0wUMACQWW(H4ZX(4-XOcTsEG_!k)tq5WJZOws8JUU zlA=Xibf}IVpJPB&j7W(IF)<@PR)oifw%(yUc9g}5j=0boH(KIDWBiCt0L=-aDIqlX z?+e6v*Z?Ws3&Mb#1ygP$T-X!1QU(z0KW-Cc!X5Ac*B|gK0(`u(pDte}{$2P10ibLI z7AFlsYzyH$93p~;M?|t;5H)d95sg^(8{%tXcaVrA_79RPd-S6zC}G2X z8bN?{%EJc10GpJLEkXipQvr4e8L&%**dr9c{wEdT8~pqi!0Hyl0Q{nA{O0-rf9M(D zuSWe+HMoO+2orD*52zN8@Ly~;SO5ls2w;T`kPrYeCO~mpO-HS)RU>NpKngvycfbgJ zFcJ0Kphh%R);z4R@`NA2fj)483nSnLA11)xp2PdtHcDUtlJ7jR1?khf&lm5E=Vr3l zgB;{>1O+&R;>|Ch1Z8}M3RE#RPVx6K2t&~DIpVYNOz7Zp{1bXO8Hth`7iNF$C}#3wyS2$Df!(u<^^_ee$%DGVbO zPo(i5>9?1|3mFnHneaxI1R)zf$dO>kg)j0XB;>;n1rjm};g2E-1;q$Ji3CR}0#Wvc zQ1Jofq=nsTkQ5a{E!A6bujKV*5r(Odi{9qvClWANw0MCu0iOZW|5r1BE!=Xqg-+ z!s$lG@R(w@+eWV<;*`8hV!#zjalJ8eKBi2in8bu{=L5De^E{@U;kL1GJEnrwwz2X# zrjp6Fv2i%2ioLeI<84eeV{K#SYD^7FZR6l)OfA!l;v_KY>?+#O*LoF|>yz|#F2(p0 zi;BM9pQyZ_4cq|K7=PwW(Kp%>1_AV*E|Ui@rTOG5+>d^c}g5@poA+`p*1DnR8B|@5*V6f5>LhcV{rlqH_j)PrhRO zQ>Kc(H%Br4IXgw)mzNm7myx1JE@FH<3q>D}e~hn-e9@1@JjT~VyXc4F9OJ7aT=avn zjq$ZnE$}cn?RVR0v;CXCnK3x@p7e4IDfF@oy|j-Rh8S&O7-qDFVT93khEYb77{(Z_ zWEf{O5nyOB01`0_kkJwV6k<4FpydG1i1~ntRscLF762An1%OQ~0bH~c0FRghZ_sXd zOI!jfv>&U{pQpdUb= z>}fHd+x6rw+%7|jJJA-X^*S^!W+bcYXU3X~JAp#n_< zs3h7#6`BrEO|*j=Gy|ZPXb*L0D%2BgpaC^#B$_}I8bLGB3|df!R-!qyp^4B=w15sY z0X`B<;S<^npNXCD1#N{+VmEZ5ZP1-@u6jVLp_kYQeP}K86PsZGt%E^g3k;$4FidQP z5wr$IiA^wu4#GI`HB6xWFiCs~Q|JavlOEp-pmVOA<1 zX2U$xr_I)lp4f}}7JFkK>TmYNezYL=#{snDIGCftU%^~6owtWMw-sMENWI)&S)Gq~frj^krp#m}C6R;ls%7o934j>vjt zbwf{zduZ8kFFgtFqi4eX^z?XudW8q6mw1SJjYp^#cywodg2(VUl?PAYDXJKrE_!l2 zLr;lkCwgi;hZm_Ic%`WC@#?XD;a8okQ?>ECoo`Y#@pjWw;2nA@yt}if!F%|S77HKY zW9nZ%DOwnx?rib!89t}l;0t_7wZd05QBCnRzM-eZUyGgr|DdJDKWVA(ZMJu*-_TOx zKRa7i{Fm=kWBiXFR5$!s^o;na>B*>XcJ!VAq^DrWN=(R4Aq{ycv}XZwQW*FW7kr2Z z-V_dA#BWe0;d3#>C222%m?UqAPKsWMI-~*x(t!$@8V-`9cS2dZ)JPYF9&$y_`_^8EHsK#_Kn#DD0u%dXKJik19J_tnE-~({5HOPmpMGmYE zxv+JOJlOhv0}5apkssTHoY-dM#fZ0&PSE*U-;O5 zGPNfye+68VZzlMEETFxM`wVb;x&!v|#UH`7zptprKI0jbDai^x-6%n1`Az3L`W+%b zVjwmoLs=d=1Y!ZKezvHgnB-0Gbm!#ru-B@j+B`@68Pk+#n>jZ-!GVMr0VQD=rRP5p z`uv>q`X=yvhyE=csVxb}nqNf*QtjJbQI`o3Voq#9t6k-gHmG zE_t{=+;|&GD~q;VMOLqkEa=0H%n76|nu^{Q(|m^&yiom6#@qx2%u zB_oX{kq`H=Sdy}-HXv4m4AwV6^sd z)SCdcZ%}yzE0`0}L5CEq5X}9bE~O?*_(_WW{505XjX*~q1Bd=vX=ytQSUxRCKp@Nw zNX9K`*xoOkfPzGT1W1xQI|Z4z6lT^8_}3>d&NakD786-F8R4m+EUb*z zN=FDXYNfJi298irsYo#SY%Dm))kmgp;6gY=-NAxj+e4*6Mi)dH|;p@kpV*+KmxMEoPPR%i-`=~ zwgNlqHDscmR-xuz2^QaW7n5HzNqzfOzSes%{d#deI(W#yz3vD{#$NG51mT2Hh@uil zBZ*ELK^Ef@1yx{Q4g>Z(qWv8$#{^ZbpP(X=r%)ih5>~-#SOaTe9UKYkMH~Vv2415k z%%E81#BQ#>weh|yB+U6F)?Q)aK&%rR9Y#oFc|l^$Z7X5M4}vhtcbHs5#U;j=sUdtA zN)WQR8ht=9&?hxRH+1cT1rx+gLd(!4BP2fXe|O5)A{HLl?Q9No&0&RVjdgux0?Ey7 zhYi)~+F_>?L+;ZCh(|`Uyr@cJppNQAPuu^QTV$h9(!-2UefO;pg`c?QNC3cxV$Wzl zB@M41wx6j~w_;2jeSB4yazRngAQVG#y}WNde9?J&Dy|^Ov_$Vs5LByX?4^wo&NM1c z0`o#oftU^qoXtU>SZsc(A7;YEBV;e=3=Jk#Y(tn4vGgj2YE7+| z0tiEl!A$|sSdO)}!b$VgqQhx^zZ`;^pjlSmcDTAmA=H!mM}Q>olQXx=?rXia*fx?P7cO*v_2NnWr(p0NT5X$TO zcS~_e(fb$gh z5|P^uc^E(zyy}}-WY~t&8_1(?U@ZTm`l$Z($y_QB(Ek5-h(;ejJm}+ZUrpfMF9LXzXJ8-v8y6c@!%Oq0Ko0AicSo>Ss*j=YH&ndk%AiQo^(aOn>-H&a zT|5L~3fDI^rQF&{osRMY<@_^TW`gkwO%&~BAdo^!#%tJ54c{U}v8fxA$B}d#ZQQ2x zrblyxLjdKVB&Z>K{$XaLMu_RE((-y`V?I<DQ#}`c!0r)z;^3M+XArkQJTpzi52K&Yj$8HdA1SSHB47(|!=n!g?-C*WfLRwcOfT`U6P0s2KY!F&5n8yZm^>Op$j zSLk3L@4}qDXhU(w{b=jxiBBiKOI^Jj{R{wb$)u&o&3gk)H+87Q$@SHQ;yJ87iL2Wl zO|s!uzHtpyHTRTZV8;V5!_+~0qKaK0IM7L~zmriMLYn|Z6`!DH<~~5qS7=3wfEj`a zh4WDlqCHLj!A30*!)8QGYYS!qB&KN@@pDfKaTaO8hDkD@8kx*-o);w>P*+rli4YFO zM=ib6%K}%kH>mVfx$%F0xA1cpns8aXm?~tcPyseSTZ&)Y5%s_%$)Qu z21p^0Djmr#G4M%~^GhN2Ga)ta-Y_2j?k!s5^XB75Ea}Z8fj3)*+=2Xx{vV^0)ay!c z1zDOjz<~G~b}N@y^+t4#@U#srWx8k5A> zE~?2MY5)zB*UK#?UEYlBZkvt*@JV4tcNj^{qwfY4vkH@-Zh$9*Exk6-3RXPoa8kKZ ztym7Mf@n%)H(jzUaaT-~VmZtVX(1j97qM-osfqaLJljfPjNdQ>Y@|=X!BF7<=kr0q z0nS1o8q%DTB<+`p#L(mQyc%b4eo`d^ zF*0IgUu+SX*YcstH!f^8TLG})?O$D4L85<_BJk9%fc&3mQBpY z%eX`%y_|Nmbcc5Y)v0iR^C({MXxg^_FWP0Z8(mhVU^<)Sy!=%pn5S$p4{_Pga!bEl z;O=Hb`1OYW{rS^$IP8DSYcc!jWv;8od-*>6yrpb`D5=3@ z(0r_rliF*Qf#3hslsDw^Ih~y8bsEDESKdDl_ee3=+$QaD*5}~X+0G=WMpP-o>%Km= zC>+sgl`@&-t=-YLYGeXbb)|Ipxd`vj8X%Zs80q*@>QY(3hW=sI@N-n_NU)2aKSCU2#H8*zVgwrLbPFW;Y-fS^&BxvTlfQ zW09>=XASM(P?Ohmc?gHj3u)&-sz~IC&>?{iL0eqrv1f;SiwB+BzX4IS)D|?>{(AqD zrz!e_-sz287)u63ME>mU=g&tB5q?WL&jbYUtTSG9$ky}hKW1e?}KFNQwrE)`TX8!&*O)x+$gd> z!6{C%L4i>aB4lhUHEvpJ+G<14HDgKK$9Cgmn>miJ5cQk+CNwy{1c@nGzdpUhv8HR& z$7e)$rqazDkM%mmmO3rJvJ--{J3$2}5(22?`p_1+{h-EGyHco%HBX)h`jQ)i(+*L* z%1^fpqB2uYBJG&@l0uymZ}S^8Ub2YvEMgP9dK-jV5n}|g2@2k;@!?8#s%MULD^O0w z5>SA4S|tDlOhB0i6V91hv18xxpbD2nkrcz@$&C;B{zkOfgD;n_pXUFcAl9_wX)2{Z zpw-u375m$pUx7=kLbSGv;^setw|6OdJgS6WhCK48UnR&E9!}j^4D03*Rf)Q=t*W}w zv;Yx@z!vGq0$zVL3zzOwk#;QK3sfe5XVgaNz80E!dhL^F8T`kAyIdwF;3mwpL@PYt zhpy1Th+2NANjz^VjTkzdr(oU-YM)m7wnmU8tlEhg+G-u>yHU^@Ksb-EO z#NZ7U+nFH*j#C5UoW@oZXGs>zs~y_FmLZ{Fl#LyFvZ@r7ARvdKEndiT>1!%h8ZCt- z0&3h6rYaCB($gsqiLkLeB(fqU3MiprvzQ6OA496pQAp8|S&gD&@OhjVh&qg+Uh0Fa ztZSPh~f{YoZ98Mx#DIp5Htkxb$3ew+V-Ae0%870O5uzA=bE6@zEqsCO1Tp9j~4fL!9r$fA{{= z8a4x{^eYhoF@aaL5sD7BgMeD~%s?bU$PgApG$CEO!Dc~(*_=^4gKb^R!Kl8Q z+(v_lClEt%w^+q-yv7Ca=mYL;kl4ZV9Gf-2L7^zGu?6dZM&#?ygmgWtzVt)i#sFy9 zJODChHVYwjFf>bf;09PKax3jvUaYs04Mx`lW@PbN3V`V2Wm()h!gFZ1K`@>KAaz;a zKW4DNq|Zy;XH6w^#KbEifEvd!JEdpSgz``sslG7}1VgZgzzJ=+cPQ-p$&lSUdjaru zB?^RLC;d2qnAEgq4(;~^V8HRG*dJIK>j7+vOFV=t@)UkHug0{&^z!1=F4rIoC%P$x zQQ8~QTNMFQNe_wzBB_Eu0nUj5DrcDPdjtu277q!Vom`__)NZaJgSGWxuyX8dpHpNi z)f~S&=2fm5E~olFiV??AeH$}yk6=DFZ0`-=0^q)q%ap~M1xX{ob@Oba$pwPlX3cZN50748eck=^0 z52XbUE6 z5uF5t7wPqbhu37Av(x4edqDx+!8O8%2Qlw(7KU$1z4*j&$n)U=wZ9a9_3Z#TVUUU97f()90 zXwhJojDq3tjyR94r&fAC4Dvpvb>GYdZsKKAEZ4=nsKbio?qx=4zW&@Sca{`)C~TpI z?51EYYa6a;#M5w7!F3VuSstuTO$#-QlISSRF~?ZSzt*OC=% z5^7~Yq|Yp8Z@UybM|}HpqInn6D>%u=yvAHGaN*~{vsoVdp~xLcuepCAo_SuH6u~iw zX+DeF#V4$`k#GriY)Yk!Gl@MdU(W#&;eMP$m=SOqES0M|su1eTZh_Q8ET^fcnWlMJ z=3uh-7E-CKxWzKCE9Vfwqhrl6^MQ$<%GcpQ}n2ZWT4 z$%^FOGLCeb#0{7*Q9T)mHIIs^Mr;ExOPjczlQq8}g51-$`#15*tn#o8?CAqav9^;x zTv)3Vq?tbSn-b%i&DSo=x^a$sbnVT8;Y!z62dS4h4f^^zmcrH)11OQL|GMGlm_o_A zgtEbl0;DM*#t$zxD2IDZd>`)EqhDz2$2mVM zrn!1+#by>1KxYQNmtY zyidkqp3MThkfv&iYlDNFdA9<^hSo2vA*s-&DhY^TVGvX+PN|~xsD8|9?MG_ zFELo$*t!XrHUype<#W$+edB#KWy1bEHrny38s+^gD9%F4Q1oC-p6Hc9r#emCgyJ71fK?E}{@!S6;C1O(uW0)sFP-)rTgSW`OfU8=44e{O z-z)*^;m;p*VtiV_>rt7p6TQZ4n?wsh)(q>BofNI--IC>^1x(TA=Rco}{uR7c?WI@V z<3?^T8%?5mh9u}@hB*Hq2wfOVIVFfv95<a^_t0v<}RxkCc9`ncg>?CUvbQpZJC#5q$jRTi@jGBFE zt(gOlEHKn>1L}$cm-g*-jOW8^Pj7OcG-3(kJcm@}2(iIVBsaa?ggg-l`e}7tdk=YZ zj4LDhr`t_|R{{~21McZ)SmY*(YZ?LKnuL!Yga(c}igWW`CP|R|hLdJb)HSHoE`Xu` z>jDERD$@Zy%B^xUVKKq@Tv<2;4Ekn6%$|DtF=x82o7osiz%~WoWHo zoG<6W9|?-SrT8F|z8XP9N8CDt+j~o!r&CKOFmqa&x$$nE^@T(lCtuhIg9I*J>N-e*B$HS;RaIA# zq+7bMrb5K_Y*(#zi7T$O|M9Pm*P31J)C@-e!@<^Y9-6ANKx=u<<9smfDb!}6qFhpTSFBBlV zssL;z4gsX2Ftnjy%|tzC9e8)m2YFVp(QE0{x9O=i{*2u8a^s$-JG*laW}jp)=E5iTu@_(IZFIaOV#r@1wXyWFz_szNV<)2Y8mzpUBuqVyP+N5Oy)Go~2RE zz&73*Z1fv@`f!RU!aAiZs{t|wHyut{2Y|rQ0&C>7d(sbw=d?@%CmQ?3N%|IV6BI%v zvH)9S)HovetpWTOyVg~7|oH0+RVVyvwaE`_~Z zQvkpmPL=p`1d46sgTQrb=3Wpp+9q3zs(vY_Uos&3xrw60O4t}ObR+7uOtJ5eg zrRk|pR9vs}pG>MnYecbX^`U}_={glqt=hXCRJIQG7YXeaBCKswghij?mO7p1EX~yY z)vqtW1wFEsUK{QQq890aW39b$&5>|U_owaLE}U2^?s@y1g!{36C18?8m3Z!{Upjh(d| zRs6DCl!}v@uMq&M9!RM7wnLP|*}P_)OMsvCA=@)XiStIuxGD@tVqDcG6SKqQp)#%rXv$k#}bIv6?vNZF;utcwH?ad89BV@`kW5FikxWVmi?8mxT- zAf^MSw{Zr72XrF9KauQXeC*838@&ssAk{GVXT&G0<^LLlu~Xkhgd`NDN&`$B0n^vs zIoE5QLa+p?&@irXJ*yEt$iJSii+=>7it9NiZ)rtuN<#_~j)4^orsyRjvXVmx_5@>l zDss^OoqVHaX3*4wJXzRzRtJn>G9!(qm0#~9@j{(P1H>z7 zS|jGB%+l(dLZ9O3EL+ND4ZsH5CKVgmzVPrV*?Yi`y|#)-)}xYcUqB#u*vxtOEGUey z&oGun{g?{1ANMaP2^riA!63l^kTa@&g|pm*iuQvE1UNY0Y6-Y>Gt@(j_+hbCi_tnT zX|5;FK5(-SF{Go{Lp*n18QKttTJT|zq0YSeCWH#Tz7^ooYJyp&G)Q#b_0oHM=$FbPpgl_W6Wlw#ZSwW zE0KW=Y`tp5U+4tRLQ(o_+y2~Q4Pz4v z;~}FS{k4$be;LVnfJ_HpvG^FX6Awa^JqPoc4}(NU%MA4gXWq@GPUv|w@(clJqJa%g zwOAbm?S$B!bmLvml1TH9{c~lS5j{l@M`P?&CX_jX{huNz*xRv>D#1f?*o=l-9sL5T zVi-qoOUA8+${1$5Z9u;!RLAI`Kgq)$^lc+KIF*i?Ynwp7vwbz*Sr>=yy5MJu#dEv( zF78p7YQnkJiYSCXcZt84vN5vA9d4nKEYOy3I{!K>I-nWDM(xWb_X&b z!YoS;UIXmD8EwB6Ob{*}kmRd_Cy0RLb(y-DFW=9`U!ZR2AY>a|M_YSTwMSKZRJG`^W6k^ttzJ4y@k5Iwqm~l=krA$A+%~&el4i`4YN~7} zD|UQv!Q`PkbimTKA~ej+&;DxXqbWdA*QdW=gHlO$+@vJy#!nUCZj~?lV4cT9U__L*pf0;ZB1aTc4f1p5oj-sWmLAo}g0Uipr>Q zqB0NvpK6a*T}R}m`h@u2!gahEBTPS=&dfFl3Dl>VOmIHEeIVXiJuH?t@E|nmUgk{vn-M^Zuu;a|59_!JPxR`$ulK;B^{@{an$Y7yS4~bLS(p~(x0x&KLcE+V`f0g9{3;TC#oy_7o&8Zf-=;G{U+q${&?&s>t?y- zz^A2)ZHT|0hcUymTex6C=tGz&8Wvx(YUr=0tKCk+LsyY}-hMQ`SWuIq(~{e&1}V`s zVR?n}= zW&t=*a=M7Jk-`jb!=n=(r#_?=_@}(Mcj~X{ zAQS+@-z;eylTxn3j)b>7+ zg5@Yaogge@(GQZ!Dz)bLe_~w~psk|Zgeh7wBh`j+^_;?3dMlPPss9SGFS;`u>aM3-Akv4^XZ3;-LN}eS081 zu}emubEE7Z#al@SXz>#iaKZ#ApFz7xdbrd|{SZn^aAg$ECrR?{A3~ZDBim+r%^BEA zh?O@?z?DpW-R-<$jAtzdwRn7WRA)S_(UU1_t)F>b-t9=>=VMn2Z57==0+t=ZMra_R z>Co>Z&QGvd|Ch?vIot`Rq>f5N%y=^v19Xt1u&V%hoZRNB+$~j zWCILKkS@s-yhtlFHF!5L_PztnU-|5a%NG#2=G9!T2mJySb{{`221R41*yrC9r647z zRw!MnL@4;u3Rip{T%&;mh)a>HJyrp6eU!1|$wG_FH~%vGk{Y}>hIiRE5=ut$E!Cg} zhtw))v=vnw-heZkwOq;Q zN2$=*Vl8utL=yK3h837|pOSb0mN(H>7}4S%up+^>H^=t9tCZUnn(1(sn~q$RWH%&( z-t$19*Ps3ucT*FJBJCa4D}l>jCdTxovpRM13^E zM7j*PHDz8IW{$5>y6=V54aMnMta+vF-VzmRC3XO)s699|Vfz zLy`W02aEu7Qk-^gzZ$kLcdO_zX75v2`HsUCnKG@_AKT%muYhv0?_`KGmZdIL?V6xsyEtW4nSXhWMvD zkJfB5pxx0%CK0q#!fG7Ts$rs8c5{6(Vb%WIdtP0KJFyP?xW_MihhTe}1tuQnAr67j z>vR{#>ndAL+!(~flPWLHRPBqWghefWl1mLXw||o|aiCG@gCQx%`KRyr&vnP29VFaf z63jW~vl`haQ5c^m#NJ#l#dau!JPc>@;Kc8OY|rZV>8#}$(e)RR|ED12`{q-K zyT?(&58%TWSG^c-f7)=ckn1Osl!P^7Z;K2^9^PKxd65&}sF2edQKG(ZBTS_EqQP?b zi!Hs#!<9_%3*iK4v4jJ_Q#W{1sw$~<4xBCm`kuv@j>oiS z#L5p*LZq>o@wd3z6A)nR znlI{yMzA76T;KOSOd zRZl*vPnWEK1~)kNcBwxfeiVg4d*QCagKdU18t6|?KQHp?PyE<6`2*9OZzup>`Q%R^ zO>C$({7IdzH)pT-n#)`z+<<^fB2WLGSA~&b^k*|pvv&XowKi(#{dF?MOgp%39Zk>| zZ!lf+hf^x0z1hZ+yN&m^Skfd~S2UoWK>Dchv9eNlJH zicyHlLq_zou0nR~V|7IH8d57hmu~y6Rq^AOQh26NP%<22*w78H^$55xwOf{EZAelE z{zg=*(2w%>B@rh$i_be2?mPB@@s;%A>Nw(&B_tpF&BeCz#Wf^%ePTl&4}>3Zq3Kr)p&<*+kZUojqdelmv#>|w!a?}zeQ!pdcTi6;##1!MK9QCxY?o&l0mP#yu9NcvV>r-#TWvi^c70bP8^Lfk~;!$z6gAy zC1Y*Z<|GkI87y@-^=EnH(a({XE<1N1}eys>i-*c>u| zK|qkVf@z0}8Gh*MxID0RlT&vmgEF+X`U4IAlyL>rg3_v1wivaclQL6?g4~}pNoSn! zvw)8`%no?yfYUo5_?h^c_aoE=0GA8UfO4r8duT^G$hca{Kp5AF;q~i)9``U-v2FcX zc_8+JG11yqh$xz;i)uF+c~MmTLrn_TqGf#NeUeTQ3k{>;OlPsx5r(w;B#?2(76Fyk#fv4;mmKDI)C-vr;RaQqd8dyK_zsT zfbJ<#FW1p#-0jLzyZe5T7pv9pJ1O!*u&zs|!DnLX+ zyY&K^@*GcsfHr)YZ@AAC(d(CpjQ<2v&1NTaMe9jng+jjLo2#3kzTSF z_bGpq50?lT&i9FGUV!s)5h^54&G)uf(CLi( zrD6dJD>#IMh6|L#z%0EtI!#{Bg|`}OqelL~z`^aCk9Un`%)wtvQN-wpr&%G!1LQ4M&IZ8)}bGak+bp2T% z8PDoc1K@WuY!6n>?z!=%JMsdmiJap_?IbH%x~TH!y_$QQW=!poi*PQt-|Y;Xpa!dqWlC(T!B<&0?ffT9Asnnq!5rEmC?; zM7U;q_yd*5xo$rcX^0rG2u^GXt z_J@Ov7xJ(x5Cyi)&UL+91EO?$kASw};wwrN~hy4`-mREeJQyH0nyQ`8kWW0i)_B?O(f3w1@>PD8i9TfX$YJ2k{OCwG&_n|kio2P8O!NSPJ!@e zHTfE-j&P7MFYZlDhz(V-R4+N>)d`p(N{w0t!PQ6 zuyAbhRDrujI@*9WAej>)LlwPMVaKsIp3pK1eu3kNLUA<>(=rCR_S~~`8g?~R<*9)~ z>K9|db0{4R#m}Kkj%#vB_KM24*V?WSv>e4|f6^_u*0w+AnYsZUsrnRppB#`#kf$Qb z*Jb+eIzP9T>;WhV6DwxDuEn&lWB%IZCez-$zB~6z&vrjBf)oi~lJj0rAt>4VcG~sJ zx5V;lTBiH3KKM}^PRzVqFvLy*y%1%e3N!)$owVj;>j_kjvzDiFo%t)s*tFJwBKp1a z;vX9iC782Eub8r9H6n$SSwn7o98jkwafFrLsRO2o#X7&9p2Qu|;#O5}UlExW)nKr( z3S5u*0u*>`TqHHhVhodqdY8vJ)ACa}=*WPv^~HRFw|{(Twj;hwVQekNhP1c-Y}_!E zb)}BJ9ul*hGQg}gk`psyE%Sr~8D)HANm7#VmEJ{GaB^O;>b?Eaz;^3Q_TDJ&akMg! zh>w@iiE6w)E?G5Y@Z(=mp-NhFe{>_78O?5UJsops4c&88F!c0C{pFyoIQC{>YKiUAeU|MFt`Z*ZsLan1GFg` zxeH|c4e{v|W@MqT;8GsPi|s1Xy^bvvWIgj;!3Qw3J#XqnkmqOa!--qELL(X;Il0$c zYwT6csZGM&iM-*hH?oVNnFnHpTb@qF!&y_Ga|GRSW+rnhAzW=Lx856h(lCO60u2z0 zUu}0X7`Ln9*#HCceiZ(zcwX}!(MEr*<94)hJGCq>{90<<5Qp{a3%t&^45wF`6g;Gy znDVc;2qaf2KRZ5J!)mQ;PSZQZh{mc(;)CMwRJcUsTS~5JXG-4)BT(S#jL15id<<5l zDt`4{dcN4d?w`JIg}jZ$3fMMKkj;!uLcnBlL9SC9(0jQ@8~FWzE~|}l61d6h>71o3 zI`?N{?~s^_8F{%IQtOQ9P!yoprO*NK23_u5-=OS`VxE54HCW1*Bnm!oBcY30+pL=;Ah?WWZmR#T%-o51@=C>8(beP9TDMzc3oh8A$VRbHLMb zEfd`Vv82%Q<8CC8;TH)R8KSOay>x=g-pTc;4+@H>s(A`^NItohtmm|J69T2Hauvqk zq_@@E^=KI}?~#h9qXZM=OQ2_Xbb->66fKbZgE0%fJ$}BcYMk5;w7+w0c)xPgPX%)o zkuGBUs_Z(YWFG2wE-V#`GJNI)_ET0a@G?zx?n0z*VijjmXdcU;wiSvYZ@N#l?LQYf zRIGwqIDR`$izF?SQv-^vj1%eO^RPK-yZ5y-?COxkdf*^)$uKHFH*Hv#r(h4Y`cRV zG3{vInSj{-p;d~W?0#^!BDmeZC509ES^9S>-%b(uwLtM#4N@*#17QRS&DdJjkRXs~ zwX3|r~r#a?kv2bJ`hK6mKph^=MgZC=ycK zzx$!&lqS1W{I}huYbXU+SxN6Y&MqY+WrC8TjE|M9OV|2cfFZ+~zdwT+$wuP7bgla{_;>!p=X@TV z5*YLU-y&?ZgyYbZjbJjlB$Pa`)8_jrNo6X@NmMD0p?7ht^M7U;0K+gIW`4^=Ql*pR zmRCvZ$&kr|$(whk7K{;$7);+&n)vdjg{DaK-7AXk>b<-4houq<44^oo3dc&x+;x>x zScjEY!1`0R2sye8oE#KA+(aXj+xX|d(Tem$x-3bZ4^xmczgOUAnlY%wC?|5OVXH1s zGVvL}v!4+pEIm=H%|ymDZsU1fdt}PBQY8nQ zt61dkk!A=I+PoQNa`T0pn9pN2`D!KUqli1#*L!XXfWFmI%ubZPV7w#7*S>V4?r({o zEthe$$CJ#s^^NRCycIkX$vrXiW9tcwY8NM|749@8r&cIeA8woUUfQ@DjX%^{?_HPe zmi-{hpd~a4`^@LJ)8?~+a5ThhzF0Pb>GF`0wx4Y($dVN+QY6VZ57xFH40(iy-&hig z$oAQ@UTtRTDOL0TBgyhte75YRi1LrWl72Z={Mx_P&cpvZ;RWgc9M%_`eUs&hpGUAl zl?EOhXd3q2Z`@@;rIEWMv>GIuC#8{9fged!6$2qEl$YYuV+d(k%rd+W2ingX+Md-? z?-$0d8ESS$-w0uZ9K>_Nyk`cH^1Jqnn$Axk%q)Q7(rI(|NrdW|ECxkE@pvE>A+ZgHL|$r zy{67HQ<{RK%ZTTq_+J+!)p~E-zNTCD$ZhwZ33KZDguMvLem8P%#iXC@SwzvlMi%|x zyS;8^FJZIEVNDlc@Fj8E^yWI3>&)J5Z8LbY&h@n7!LU~P4x9OFY^uWV)D9M?gms-3 zN-M&z{iE2(DY68RgDjsF>mJUj>t#(&HD*iijwdbOIL~3~>axKBooh!5pxNnolh-p- zq+Z#RRa(N4tSW29iqryBX*o=9>*=o{SN6!3ld+ooRhV99v<9pD;k`Z-T_g{mUv|n} zCdD>gdVNb)l+)9zd70f3?Ed|idy5nY@$ckdl7<2hJX#T4Hy_{0eEl+n8Gf?1_;|sm zXR*^Gv&~nRJq~pSts`2VlH+10#zl@-uj*O}$a2wCsr5Y77C`UUR+EvEcbWl$afUFmYGv(DwF(&|^@UT^j|8y5L51PPM5ebTe!P zTl-?e=vqW+uqwnAY4Xszs2~G)Yqkw9{V4fS{VAq&!?CR~e?aMaRmA*A*)J6?N*VPu za7u}gDy)YknWSo_>dnURq-Ml_yViz1EA|u%EIYZ7n)fgN%CdB2DfQ#O8jr^;e;t2V z#pmO;BkL%O1hV2!pHNSg99yHtoVEL?I6{F6%E`?*mmx*bKJBBo6I=xv3cF_L)WnjY zqV&6Spf&b`^gZ4xlM{y>wUn7M}kjl_X`7)eJw=Qo{ zT!n{?F9_D9;)$3%y}Uzxr-Dx}WS$}gI-J~5y)!$T(#<-+!b>L@7yt#2Dv1r|q}lny z%~mQfF;i~Jmq8a$f;PMpXXTylouphhkDR7bKl?QNObx3&<5T~-9f4n`>1#Wuzq_z5 zQ>MTai{vT~2v)?yU`p?aoFEVR8Ob5?Geq_45wIQa$5sl{M_ir6T#jpB64tXQiG8Fd zfHEIQ8}oTc2Vu4GWq8r zjpf^t$DJc!#@y@(&7>Sjjb3 zJQNG&K#;60tqUPSzl$M682Kp?O}@&@X?=DUU4yAbRX8AvA|pEraCtCm&5yO`x8R9x z3-@kyf7(+P?x^lyo$pGKVcDCWz44=pssgn&qms$kT1mlRFP?BJGY;ma8FvR>b}oRz zXRQ>NshyyE(eY@2`{Yw@{)I_>ldSpKGXO5x#V#riiKJrW5=&huAj_a$uc)$}Y&Qqt z4oOG8=6i0Cxmh1=RQVf4J}SnU%~XxxfMWwO>~SjoC0=a*b4 z38B$)hsNFXbFZ8!@g!?hjMtEcme)9X1V+n>Vl*cyG=n-AaSPfx{6kAiG|T_G1vJuR zljHOyXgZ*h8`F-i+Z^UeXguw0oT5KPG(eJAkO!oCpR+s(7tKU#h&Vx5HCzh0cIYkHL@BC4MQ$9a% z!7mlkxl9i#W?f|6WP9gGHy5S-k0sl^}cV%t932oj+<{VsQJ3 zi+_08PHEn0>g7KfS?B*4ykbpJekS_ZLm*pnohIVJqx2&V!Wg3dy{VG!qAs-|$A06V zhV?DN-j)TO7HShioH7G7VxglIbvR);Sfoe?V*HA1<=L18Wr+Z>^PzVw2JbqoeOAMR zar2=BZUJGsW@mzwnV8#G^AI>he$%}0c}L5x_#Fi$4ouA)_EY)Y(q1(3mqK)`2$4|G z)K2rfCIOY3rX&|ix8INHtTB0=m_Oj|a$H$H=nYh<5O#AV27Co&AT;onZGA;k*41%$ zgkwgZd~|8af+E&wMl(};S(@_iH0msi?8uo?CRJ6}dd$xTWI(l&R!`YKwoV@qadw54O(#C%uRj+%WOkb zQcm|CDMjP~0bU|yAue`##G0a?Hh_SQ*q3^DDy2S;nAyn=Wc-Zfht_hiFxG~BUq za3WA}7zQ!6AFeIS_xghllUU7F(EqMwV1Bv}*55CFf`sS?B9k4&Uu#bq*fbkXGC#VJ zMI%Q)pD^Y8%8?bM=S$r#xxKS{&YiTox}_qk98huSlUzlfk!cO+ zv>X{v9M&p{&$=m6Sq+WrD|AFd0=BHe+o_?m* z|C1f8kB6V!gy?@k0#^n-k;%*jS1K4e`sNLopQ1&2WAT#=?em(aU)LqXJQfYmG*o5M zR8!Gg4#?3=bI_@)lu zN6-K2WTbrJtA8KlakRFx_W43amr1h~{c*qXCyJWURt$8E&zsq(yRvR(Czq~Zz|?pF zAQiE@NTmcDT`}4e^%MUl{%-wlTHo3{6e35Lhoi$2?(rKWt0-oXBK3F4Nq3IWZxpNH z+8nJz#dfpFmf}s{M{NWCrl{q^&njk>W`&AdcWE*^r&*FJt_)UmLX4erXVJ`_&`KW4 ziz#vt3PJ=-@gfH;?5=;5>HmacI%$+tGL(wUw$Opnv6>%?Z>HsWPLzD6~l@$;ZhgDv2l;*$X@ftxu2)lgzBhN9r*QS%4x7 z&5U7)HcY^W9=-tfNFY5{TN6NKtA5q}7`ACcFa|w{{-Q$zc_|1nhDb~_hC$4RaAYzp zRs7uCezT1#Z9|LOes1ghuI-Cg^}kWE*PVwR^=IYfzcN^8ltVjh1-Z6nZOOt5wnKTU z!Ur+>%8NoLtC|D98v6?se7G6+-`IsnB_kLjl)O{({Wrsydj@&Xn_@^Z~c=7|0No$g}$ws7cl` zH;ySUteV-^Idk!>8s){+bNYP7#tzDM+qu=A#!m8f+u79=`5nFi=oXrIGEM7*%xi3B z^4vU)r_orbD|Nw3;PXT91$>CVO{LWiW>183mVSJ*&Z)1|2=u;shpu-ylYEvg*O^wT zQ(4YgQeF2VoF-tuq~3MT$f50?qA3Ku&f<*9#X;F!vq8$twf&K_tmb^sWbnpJq~7eB zIq|}dQm*mwM)#uq+wnHnboni|6oHr3LJi#bpPZ_JdDW0Pn5sEHIBrA{Tk(=ZbnuQn zN2~J+6N2Xd(j2--{PMap@#Tej48yU;-3y9tsjz0FGUMQ!lx(`@$y11x0|(o8WOl}e zE0`as72;fE{k>59Aw0F{WHARt0b1~T7y8`5vIvGTl}~_5mLLDYR4V+J88e~I{IQoS za8uTO)|FNZBDCY+hS3DRlF45YPHSG!4~un%U)jTYw`;a1?}6ewy^az`$(MyP&JB_^ zWjgx)t)F#rc*(48^M%!YajBcc;vr6uEKPCdR(FFwBq!(!20!>U93f$wdwGNIc6cqj zz#cH<@TW6)1J2CHtMonYupvh<^A54Gld{v!(H#o z#sTE@UgvMRN*c_bvAAO!*SlWT-6}q z4|%GUmzT|LB~!9?{oY#9P2S@SX}wBYtcSAO64m(>Z?FTC!#+Py)iF~Q_m=z{8Zvo+ z9e355s&o|^cX^S8k(;JZbg20;U?Bd1s$qXfUfDfU*W`hXUeAuK9(zT*x85w$GBs{u znT0*uQ@+|gtUwoAuztV*mzG&GB~3%dSM6b{*{AXJxFTfq>D&X6Pu(;rChS$0T;huj z&K++xU0pIg>|OlIK4g+_82;UZ^C{XQsqoO=n56IunE|Nu&%&~2wE)_tXMx#y~yG}`qHf8sA{xQN>p9oN4o85GSk~AG|_q{ z>!eOKd|@YI-)PiGgUXStDE3p1dl00uW?)uc?w#Cs@8qz?bZ*iQ4m-7gB;HY})y*!E zeaz6>>-0Ll;&XD=Tpq9~*?)DKU78Y?a=&y~M$9O})N9Sx8CTM-SU z*En{E7ZkFG&O$8>H^TvIu4NfDYnUf5<)8>+UKV9<)?mg+61UzsRxc{l7HQ{dTUTEQ}I;6a&&;V^<=$G<8F&~mMC&`q=%#v{6_~)br85&>sllW zlbI%_zrC#s`?{k|-Bf!^%1}b^QIXAXqT3N5s z0eshI%UgtfE&JLnb1b(v<4e@YL$%zJSI_ldQA2S->v~m_o>Z3^qlHzxT7zqduij<~q+Evrz_}WpA z`h3YhEJ>~v^8b=H&`Lq!`%vwDxBRc*)RWa-t=j6#Pjj(VPBvGS<&eNLi&Lk9MVx}O z=<6Y7<7DiWp&;#c!2!WbsC#Qh{+a@!NGa#oRsA79HA4AV>5;_KPdcC<65x+e%42*s zV;`Msr_Ru(86IAqh0FuT8ACR!i;g@Q$KNT2)MeZH1ZBR5vC&!TXXWV|^D zW3e=Lw5C*O(-8*%%_yH!m$e|Q{s{XfVu?lK&GiBG+Hs$q|JE~w@6=-60j{Hu)q+Y;H$lzXF|Vnz0-{$FT`0#NUgAs-gMq?jh3>c@h(^f7jmC$$#!795zwk=; zTa!~7vieb19omeaJLMo6>M2J$if&x|yIg3ctp=;!+Dx+vAz)QRP#&r8s?%{-4>UxG zdhg!Pj4sTeV4_*_2Ny@NrwrMu{89?~89w>kh2>m++ZeT~ZbN@U$e_ckUc(Bhlj!dnF25icn&);5nFg^JH6biR( z17(t?vnsu)EM;|x)8f!5vrDkQU{bR0m2Ip&S0gmmt4&%-WPVMjZ6H-ax{}!~vp8gO zoE;CWMU>jU@>8oUE@P$IXJ1~{1W5>c!7EkdSGIU0wPH7Ycxi+r)R^@W(?H#Xwf`Xe zNdVP=0$!8Si344SOlA16?4O_ z*o@kbt8#%a5g!6x{AUvRtn6HixD4w46(cs-iU-8go3J%GW&_s~s%x(^@YeRl{p`eR zw>JeaOvz17xl%q&nz`8vjR!J&Sb*V2%jrOq(N;<#X$Q!<1QowG?N*5mmf``aAe4=h zsjJw9JMGxaEEsZU>fJ(fCtH3TGJ8hXbE~D^6ZaCIfz=H8w(XjM0FW8?x_&B>yGMzq zLQ$rRRiwxb8+i6$bYgr^_QQ;YA@-t^?u{ck@GQI)-$2Obp@0XBYE_lIB3Se1%{P4v za+gXW#r-crO@f$xyZ*K%!FA2dVp?2n)duEoE8p8_O^tj6s_>W2mt+J^;aOm&uEl|2(W~QiRVT&daw zR(rt<$6*UzL(r5nYtQx{r;`-TdTYrIf@*-Qe&koiqm6%%Ua&I^OUb^j6*8|KkRTtH z!obyT3mRQiIBUvy-n*c!Hwnq9@IH&BA0hg1Y`TNRg7pX5}M%r3d`iEBY>j27zmZZ6@;UcVK`s&vH1< z%PXyyRYN&BhBH&9w_Y&%i@u+SJNvcV1UQvFxUs5O)GY8OoHmT|}d7j3kN^F7>FWx84NFx8CJCTKk-q!SQTuk zNvO{IzP#w8;-E_vr=pgUS4Tx18*otkSq%%WRb`#uhMgt*wKz!KpP!i>J-h*X?B<6k zMgQrdwvikufwoZR-Xnn}(6~*`Q=84;V4=B;2zbegYB~3}r4>s#EqMHEia1Bj(Hy1X zd8{&d-kKqgxDf#V9ZPGrg1rb+8CmI}NNbw<>cWy0!wyea>sr`u5@@PeLA=hx$WfPR zE>iL3Eb%&MeS0hDFC_?! zrqV%$rcEsVCy=ZV$%U-+5s5NhVeBzVQ>8R3AP<@%!wS@iEI{#Vj*=Gy^6T!A zr-CRx(}tIJ^W9)gN*ZETVF6Nqs1*?#Nr)$SB}@7pR)GskFZ=p1iEmILu^AhgETf0W zuKvEB9#1AB0Ipd;m6HY4^g?Y2qW2h-PQJ1^*p;e<+Kjh)&Q_q^)fE`{OJ1!_tO{sV z+&FfV?ZE+@Pa9`0-4nBiEmy5f^>WE+3DLwM($3Y4}K`0&!}_g|piYtbs&`$a}& zm`WW@`Zvz(tJd@X(-kCuWKUm5K=gAM=YZa{-nyYs-c)Hpj$&z6ASkV3sg)d|OqJ*Q zN#qp52mWltR|P{BpmTTU$iMjrxBIpK!V8w(<98bPm#QjEm}$S=>`hWuchtL;vbx?% zBjnKEslXgY`3ZpxUm2(jX0DOvl$BukrK>^muMcH|^)pg|+sBwXheT*-w>7}@(0Mu8 zKiu|Vi?_X}1_NVoRgYi~SVME^I8tPxa@mwj7B}$;FQrjPzr($tAhTO0BE&3b=2q^A%^A<~FQA5=>IB@vV?8Y$=4`Vpf~7RljK ztVAZRVps@el)&-ct2O$?A1toLTKg85(ehjblE}l&nubj_Bo!oOzl0d(CC|7WAVQuC zDJl9lELX-hJG?fnth-C56?n-$^P8u1dV8(43Sk5?a@QEafH7;(2hN_^4hGsYnpV;l z`@b+3s3Y3WR-(G-^ma(JTo{Sfy6WPCbwyK&R6oD!37Na{YK8|O!-qIPrrwq1nJp%r zq_Nnq7$wReSg=Bt8!I`4Yuk=7yN$C zTYlVKD%8~q23p}u{M(NTFra|Vtdw(G@3Z`svS%v6fHEkNvm}ptX|C#M2ae^bN9~o< zHg;=p#TjD(g*<^C8(nON7``--UlbO>s(xxjU{ghsrS5wlgk05vOjcs(%NCoh4mkvlywFZuco-_` z6Bx*%k7+($E|Yq^EBx9FKRox2+6YpsL&kh!(`}fwt1}LzsXRQxzc!Z8((xN(ZVwb& z0nV*l9T4oC3d%T<4lB==TX3ZJ7bQ5mOITJ#N`Ck6jG-VPi2B^$L3MOFidOUh{Oadq zDT>?JlvjMRkLbh1X8t?dsC_T`O1=pdp2((r;fV+Y2xDLPca1QnaqaH5m0a3JqT&DSpu*2$RjTD2sWogV?0r}_k`O4gs(7fINNUi4(U9|3 z@v|RN2I|KXPxa@%r18DEH~$Uxn)>sp?>+3x3HP}fxIeyZGAbf>%?u`apqlSyap?=PB7ReYqEZVI}#=`p&DafAAQ zQzn*~7f&&z9LU3M(RX185Tfb*5W1^_nlb*9Bn&-!cH&2`W9bSZtKe)|o*yDSFj+|0 z{blaz95fvNq`41fk9dX#RvBnZV#6*XIxCW{z9AMLtOsOjGM;4u{_LQ-_8qtoFZVY9x z1SKn0p~w5t?(E$S7xJE1pN>a!%WSUbx3guwHPFM&L!DUW{#oydkn3l z0t|Pz_#wWD+u>xua>awcLX469ml0x>Fb~1*ZQMtMgyX+MmT66RDMj>NXvWLv!%j0y zskL=BK9llCbee<1a3L8WMb(zaAUZ2LGwZ((LZ}R>nMEhbxHWgoaw-(3Gkw4Rdu!ivIa*TDylZ=8aMFA`r~ z0)iLa1T(9$xf=FGb_!A>n48}QJC2JZBA4~VTM;72a^P5S_D0Fit~!WmZHEfrHao@^ zaR6ddBjC83@H;TQji~Rc({ff1G)Ai9HVc7F>!#pH+!oF$%R2d z1oRXG_o^4%^rcJ9+I8mT)0VC2hm6@xMqkLIp=Cd7v74+qjkcLHTb@i^;couYcS zOqQ%c+0>9ZIO=^z)5~G@ehjr6^X@FMm@e?q2b7RMboGHv|N9lkVc#Ej{W2d6^B8TX@i4 zcnp#2w6i5ZZNa-U>-ZCMgH_PLXRDYvM}=UB>)~u+7^u1vxw!4J`e|kMUf|%j0S(i% zPWCQ+JV9}Ro#9Ng@;8jcBNfHy&wSAO`=&(skfDSk*Emg0Ds^LlL7B;+SYT934E z+$q&9ez$ObkJXZdy6y)T{p3!Gw)&CtOd#XTI!T30u{G5+vu3Og#OcSMEFuy4S)ieN ziCk{CiSb-5hT`5xno8!Hj#@)BnXgb^2GT%XCy%O~!KFIeiGsJf4=J~jpP0EC?*3+;ivA0MDyODm(n5kqOarpMB8y{S20Ps&Avec+*8LEV^l$hoViE%Mem8 z1gKUfp&%4sKsRP6t+(#NMubNC-Zg+R3tRMJiy>dF5mk!xQG8X8Q4c(@OS-X0$%9k+ zJgJ;pN>+NwvWlL`XcZNJ+e`d)ZftkhjP0BD_`xy>u4!#ipvj~MO|EM>NQW85<2CCJ zc^3To&2066K)*`-6kOezL+MNXoU?jp$-9>>*1todQk`C&6#sd1`X9%V3U~?ex3~vri(<7;Z+HZM^=4aYHJ9dZB zZ%uzQ!Y!h=!|J8n>Y#HyZ{NH^SYZrNyb3LgN`+EURW6cTVbNIRi@tr_H`x_!h`!8y+uOXL zu7Q$=sC)yK4wc6aiJjgNRh6AA=M2Uy&M1bfXtD3pBd}CNFCvE&X!MHqOPtQNw#igX z5wPL`QK8+qcI9`45WN^YYOsH5;I{?q#$i|zqioJa;<{^${nB*yz(o=ho>KfbeidR{ zuM@29rk3C-hykK)_yAb%G$=%W%>L_2lJ4mrU4sv428yI6b3%UK`{8=FjBmuhvK@I< z&eZ|J(wQZN$Jfac%5o~D?X}eo4TlwJ5Sd+$!iv}<6H#W(->twAR91njQ-%Jn4=w5H zYfzXqP+JR3fBNz#48tk3sP9y_U*rwtnh2>>NFY!U5O^IOGg1uz9O#TjRx}?%1Xrd#% z!nti38YTx(s!-kbpE9LHVm2;YELWH%q27nHvm~?RL=n}XaMN9WrAFwa2-C~wZFhhH z2YkMN@h^Wa<2nv}nYS6EEinvS2iXMh?E=@@Q+&r2R=hfX+MI>(*sMpF)q+@Eg{Gv> zP%P^*1>4@)xIwjlDH4OZDA@}Bi!*InqH80xxih$7BxV7tH-prxxg&~o344V{9hC^myyOQ@YLXrxf{<71GY%ppMh}@ zUqUz>28V5QmcNE!#34QiK{U!&dfd2fJvW9@J(x|hfGmxlqJ`Pv9%cy?WN0?!o{Ekrt|JM{Tk!)#>Mf)^wOVC z-pk5y>^^aZ5FKx5fKug%8jYOw@8$s?QtN-5w-uMFTuoULk{2H%#WK}Ip@~Vy{X!ti zbDjKCJ|u^KVLAm2$d}6s8;($@1OrsW{7ByX4@C3BCq7>QQ$Vc0S^hio2Amq5)&j7M zM~VAqTEZGV9D6Q_hM+lyc92py^b5oo!CVrCDkxn6Ddj`II~9Wf`A~CUf?%-12Z7B) z6s156k6W53$T=6Ckqze!t>GeWEDHieL&;#n)gyDyrCA#+P+)v~RaPZ)L|RaMvzjd1s6Rj>6sYM--8r%^T# zsisVmuB5E&LqA}9#gkrF{rLTd0m;S7mPzUwvz-Fu|3+yYM=|rVASw<2ZsdI>B2eE@ z&|!wsN1!4P#AM$L8Z}!=c0*lY&)`&W`ib)jT+(xV zk{@^qEq;m4-zr7Fcd<}p*2-Fo@4eV&Y(;^NGo!&z>f~6d_!DEUQI0qj@IIv64Sq6n z^GZwNW`jK~F|&gWIhg+Kj#E5Ombp!NeXr|AJ@Ucl`OR#9dRSQ>*Q(cdi)2i~OtBhy z#=!r#7NRA8@gv41G_y7#{CYjq-9wlm)*#LpWFJGKTuzNFsGh51hQXTmKx#Ehx!9?f zX~a^eir6ky;OrHtiub^pV3c5$cvZ`$JKgl*Il?&+D66B970jDcRXtp|uM9O~%>UZ% zpHAu)`+UG`%s(&iO56ldBB4uSPuCik+aE zfqHm6oMSOC?~^|kvw$wtuNxB-u!k1$meEEZs~QGY*mO$O{-5T)vrUCa^+J5KU@k&N z;x!sG^_st(F;_PJgy|`jLi2j#doPM-vldkkhh=M)1lr#+v!>Bif*s<{nyno!n@~%c zlQ0nOjSyWa#6F*KZzJmgXH-24=ML#s8&ssdf~51-!2-+dmeI$wDBSFp-pW@(5&JpEvK`X|U>i%>QW zSIsY*vcB!6%*@NFI8zZ>m;%rQafW{pMXeoj@D1$ ztM;%gEFDDktnl!MVAYv|U3Woh`husb-72ukt3P}cth%ycuH9*7{o-7KB*RtFY5BWt zD3zq}aJu%u<4e0!>@JO@O5$y%%LXK-#cPj}g+@8o&}K+zKDqr*h%U~!{P4~4!z0C6 zW|4-^Bk1Wgpiq0xq#Ja%IJLGOUodO^Zm=fKI{x(g&H0Y^_hrd&Yekk~i}FDaUhB6J zr)e!pjZ8?$*;uE(h=)H47V_%*yIZ~DZL{Ms{`Te2<>Bw{C}6cD+a}^QmCJE!;vAr# zmU4O=(?WPm1~e6Kd6W(IuuZ+@5W!LWgCAEuTb>pw!%|gclq@kY5K~KwGg=k$J3@iT z%<}UAW&K#u+hoDpcW8GB_8=Q-^DqA5=j#CS!m1Z(?ibv3K{G1|2jv}VmI8&4npCLG z6o5dFS!Pyw_=#JF&KfQ>QlXqiz;xvK<+9=*6t(?lD$BfA!wgLj*>YZDyGZB}yyx_+hQdA(Cjsxk&z7 ze*St`s)UEXaW{+qRzMdOkeF9`^s8jye&3z;z2BrmlH0-hl9!IYthW8%*QI&Ok#-ET znDh#JmUH3Q+_-8MptqpZrk6^l6%8Bf5Y#!HeMZ#P-)iA+o!(ks*FDf?soFBVrCzJ? z_;54iZ;ff(e%uU&QKAx42wxH$E7YJlm1V=JkTsScn^1I!G*w6GZTBF)q*qqpXSFVI zP-YFM;sEreY&!8~PJwjXNUH24%ncWUFt04OXe*c}L3>59oq4Gi9CK4$%9YGvra9fy8-d2^ zVtDE*%F^0)6YK*S3jLZx`RCYYrd&sO{QbZePP;ZVY6T8w$~6{086eu>A{;~?Y-@j!T#ogSztqL z)k@upM378kthM@k8bXpCeK8ALR&L9XnoX=kqrjVla6m&WC@)SjTgruIPuVP$sY1zU zUe1bZ)nYvY(mtM1*;T+^q&0AKB}mIqAN2aE>*(Nzni{0g;FF`|KJ8xQ-xXY~$XgPP zju|SBlF@gix!PQd4load8>Df9qV}POudASyJ^9F-Z`AVi?JiG6fR(suZDS~qyj1F} z9;A@PsVO`|B!ja=b!Z~6VTl%GS4((2M-5dhsV$c3kX7o{fkQPA%!%PGZ~Z-}Y)+5! z=J_j^LTs%b-{LKz*0yE`f5&)7Z8+Z9Ao_f;2t9YyY-X)`8B+=q6I~5i_A*+|{2uA2 z4>l_w`0=$9qTh?8KY%aj8tX1c_?0~{Hn<=Mx&YVHpJ-c2!^9aqxPG&s|3TeJBFUNN zvAvZw;}-&M4@56HpT(BJ_0zFXEAQ#U&5DP9K9-rlOlnVDzieZDtYU{Pw+Wg z*&2sks}RPTd1{FT|7zI@97$w0%E`wF=*v%J2?VT8+S<@;GkOL(CU)@GHIPc>X4GX} zOUX=MkFn^Mj@K;msDugHpt%-h%KM5|hNtLUyrX_?pQF~Q)W*C4^tAqS7}NqBQJFjE z?U%ubD$Y->B0aGvAt@gu5?>yQ?Ha7F@kPRhd?c&QpH3c|#Ykcf!^YWNex$CKkN7CC ze8IsgFi@4%>o@-5_oet7fENV^!>jq!b?6d;Tm ztT5}?_$3rap0O?47>))~TZ5y{R0+BjnZj^3Tcg8mfG@ zU#=j>zKhJqZ!Fi7p*{J&Jp#(YO)gBcDroC^~!F%V*E&wtwl(N0^sADcw;t%DAT zcJ|zD$q6FrY!Qb?-O+D~QFhpy>AYJh6a^vc`6qA)}La`N@ra;T(vbJf|CC=yr@wdVFR9vAtSv zw0V8zDpE&OZ&WDx?Yf{z!S7Mg1LfeNNUkcsT?KX4EULjJIYU;xs2b}0GpqE72waw1 zvxv3aS^u*W47>cfL!0FUH?-i8#V0VxZ$H7=i@~8bcNIgXB2F0!k4#BT-wB1Eo}OEH z+<*s}fRhzD$5WQL^7F^=sX!NVaX1ZDmk|VC+{OG)XZbk@-VIavwnlY8apOPX^O_`DOeqUZnc6zcb)Mdo!fDu>)%Zy}NF@>bSxmNrdHwqomfIc{V zu`ByS?T0=z$OyV!TO1$-Ikn*=sQHIf+ja%VxM!sZUBkvV$ zR?FX{Yk?-pSlJ2#b_QWkpRUU=4|}-P zmXKDcVyS{<`2lWL2;&Ha!jlTz+(N=+VuAI&7A1SsFZt2P%>!rb3T7Z!NQ+2YEBfQc zJ(%(G^~4-ER8H219Rg=r_bT|%`!%cHibrS4%@nzx5KTAa&40C&oVZOPBD9+t4ZgEB z0>-a{OV_aF&9oloOq>k4)M}Skn|Z`&RLa$LLzQ|-3j=*%leU;9GSab1EL+Z1C~}Nk zsY53uJZ0G(vhU;eJ_$NRw`EVDdaEsCEq^qo+u(~)ZMC+MqTI8I8ma1Ns1c{#zvaAJ zApGx8zuN}h3P;!-J8R6XU8`H5m&i7Q@(XC1$NJc_BXRstKhH_S`~8v_v2M9R`x zt-jwu@qGmW0kCRz%90svGfqc+)l+0&tN?es-Em-7$BvHO=ThIqPHwBXd1cwpEeMu1 z95BO6@W~IOWv@L?nHpx&=O@?$kMEkZ<&Q{xA~-1YBu1) zgKd@4)`8Z-o+%Jxk^mF2nYEWN>WLEnFsxHuSUICZV!?LJkpi-@lf7dTt)fpB&F<<1 z^xF5|r+8`?z#E|uBP2h2?+lu}VBfwkt4oA3$=N`_mRnx@AXNMmm&ug!S*G$_0zTvn zpVsgW%Gtv%CkYgEkgpI zmr+|&tEsxoZQuH~>{;1>2wAw0sX=xTs4Vz)|8OKINm zYApY~^)ff$$Z7rnbB zv&;OMt$_{mtbAiu?Dmv>15QcJAY@P zn#~n{HeN`m{O>;h!xmG6ejgS7JUU&D%HPL@i;q@- z&)>!MG02ba{Ncsd`z6&)P+3iz;R6BwHo1%w1h`-$>Dm*_3fHYOyb@}8dFF*I{OD?i zV$QyZ#O^rPQT3KIqu+Kz*I?g}*kJh51iX}217J>-dT5XED=*c|ww58juTT)aCd(-h zTIWnR9A>Jlb)1Xs0e!|&hFe?32)a3yfY+|swnZ5eN8^Kwt5b2=+N zR6Jux7D0$M_B_q^3>kHT^hipCQxJ?!#r`TNe)^A;s#$wuK)k?G2~c??+VmBX8;#pq zID&9j!e1S8*RcPl!?UA0mx1lW|G2)zG2T5ia}ErX(0P`ENBt=Ou?n6$Z5#^o*cVT8 zI9mH>jUd538(rEmJEy6ZQR>s#6{^G=130>DJ1gp$&fsNMgX?FEqBO>+8Fq$@60v4+b4&oPsi359Nu?i zxTSAmqzLSB9#0Zu{W_~Q7?$sk+h&=D>94~`huptF1TBkx4P|CEJQPdKE3gs<%8lYd zA+WIwYKCFw#tm1D3ea&&CG9&>(JjN+0z-Yf@MB@a1H+;&1(U8GKy&i zSUat^+vQ#R4pXx;|2%e9u2B40hxnOKAH=nTH8pm(5#Y!gNOD-DX3;?`WS^ANa7*9c@dU$TbEKOE!j7fkx?HX`y_Hs-EfiXJ4 zm^U|3oDY3G7Q)Go(k%B2Eboht1~$Z~ZHz`V-Fl2B{js~<_-m(+S~yfWq~b{7nfgVa zVEs7($8bW8>;{q1*(&2;`}eK%#HIr!)umNh!f$zfL&RC+vyAhttP=?J5lSdvtI}{} zuJR&_IKQ^&r+c%Jb5VC`#=PAb%_p(BTyJI9x~_>Ya`n}T{?i*-QUP}u`1xsY2ChF; z-}E|`q=mO_)pk8X^Ovu&kt<@e6VHvo&aii<`1bmfa5^LUD+;r6m7MA{=6P?*KqAvr zX0J5VV|yY}0cl*nA1j+N-49X*(t;VmdBfTKv@jS@x*zEHpWAI9hjw$T%U##7*IU!r z$k#K}#?s%_mmEGlH!A52; zt*`VjSV6gtHn-kq^|0hYY_Oiu49ZnOrLu{roTp$&Jk9B~f-Iuh&eYcB^SkS#yAE)x zo4^sza~1ZvhY%I(p4XqsVUM2t?mMJH_D3prnhJfxqoV*MO{9Q?qe0Xdaawh4OmzY{ z^6em}FJwRQ3x3V5+A9-;BRT)Z`~G^_UZuo43af2=uEaj?w?o8_z9H2&%^l4k9`%dQ zZY^3`I7AtcRs8_f3Cj@vyjJoTPIRRk`VX$k?Atr;sT|1~N>_4z_sq=bW)5x}94KA* z;M?K{sbm-3{1)UdYhY#9WxLLPEj|m3E%`hmEdSX%7?!vi zF(GU>XgB#W_W(seu2hM#u&4`uMuoTi+&`;biH^H z(NL9wZNVxoz&{rY(0AWwJ6$bK{s>)=A0cFbC>P1_ z3ZFl;`O2kJUi8v!2zV(1OR(E$I*fYE_6u0e!*%g6O3v9pfIXwx2hQxBfCIxBEw$2` z?z^9tf-)Q&#y<4x+M)G*q@Zc`P&im+@^$*l6-Zs!p;AMaL!gYNt_(jbtK^vL7#((* zg1oFpo#?+Dh+J;cmL0ku_wUS+|F(?E@X}zIBeo-zaj*QY7IW9*QBY318$C#|h9)hW zEXyWc`$so^PTqZM+N4}a@s$0{#Qf}5Nm|{{p_ZTP29nN+fw}#mb<#3=>vreH_j%GK zya6avIAZcOl|E-|I_b=rth_Ink&!$I3PUZ=HRg>iq5c2-UhZUa425d~fJ6er6&|De zQx_aS=9Hyj$p8aY_+A}63!&;C3l9T2k7Byk+4Zcz9`N}nY(Zm_(A!!;~gp znV&sLIPq|*oHqt=G?Ru@ze8(2w|Uxt%||I=d3o-w+Q{>~tX>-2qCgz|{(gkZnuzPA zC}r!h&pF<1D{Kr_AAhdEJ`b2VCJmH#Po6gE8& zl1qJD_hOm!VrXZ_T0HOCHJ5Z%M39;=V`5UpmeFQ3%gz%Sr{S zM1$={EB<6gmT+Jcelm&lUv#PLcOGdPuB>y4#`4gb8Gy5S%n?+S}BeJ?;@yaYMRF&bDqr?nrNrj9; zddICBn7=n2kmnnE>0GQ;rD)69d})W+ClCMEp`QAo54JyupZv8kMAp{!U7hvH{3{K+ zziZlZIIN}f?#&iD*}vubSPVVBHfH`?J$By9Jwpfhr84>0AoSGer8b_4bCVHm0s}#T zLdYZ*3x>cze|1c)5vr`xT(XBZA3c#L6tC|pLPGWBaB~WwT8+M06y1_aW<_nz#)%8V zs(?ucD=Ev~T6QqMsl5KdflM7auh5(uWyO!*TUW?>E0yPUyeWOl@v z+0WAn`}$2$la!ZEaHZ~~!uPQmWhi}cfL)T%Em=QeuC@Xkrl*mMs3mentr6LV{6jNf zz`(Gg6s}b82_B&eeZCK^$$XXcEzjAf0Rzderi9Stv2%dYOsU4iEznEr~Rij zG)CMBaqd1+KVU(a7qFFr5~$w`4Iqn{YQh=zl=o>%VB@nbLj?!c7HZ{=Yz_CrYnu%2 z-nPP8-%AAcrDIJmjg;Kwroz(toNB_EH|Rw>kpEU8_3fo{dL>GklxfTFfCq~rj^uaz z_WWITd*-BX1T0NBN26Da*~BK9o(N5Q#rPt!!5Joa^zOg%kxRXjOXZsPW%&gA(w#GW z0b;q9XW6KOu^}5GyXRxag2dPj1{UQ4qeRNAY`-_2dGvGkENykO)#&JJpS{D((&pq8 z-OyP84Tru~K>zUmJ;i;$iDfK&Jef6|Z}?FBJ8W3}`8jY=MZLz+|M3b;IaXD674QhN zaWUt!e1EBT=N*=MkI#pH5t}m{ebWh{j;T`oR1d!gksX;DyH3;0fBM(y6iPBzZCoiY zzV9iyFY%7=*u9<4VTug+=2C`OtI1@`WE{TO(MXl`0H#gfT`U*sMBK7@JYl|;!cnp* z=pI6uqJZ%AZ=Xf*<#+t}lr$fz3wyoK%<|)tGusd~rQdcJRct07oOjo4*&Z>Y1Kl5TyAGuA&yEfoHN>G-9s4Clo z{=u(&@HhbIXl_Ol*FKWUtk{dG^2;*fr?Ba3LUlFAYl4`QdA(CdnnDB1cJ54C>;p-A zHmEt&Y0`opFr<-;`U^-hk&K+er4?#|oUG&XEgP-H7t!s^Qji{@7 ztz1Q8%@gU-XvNn8d5sh9z6n;}LZ%y(T0z;3()bfUPMz+BC9K*wE##ExMDd2Um}uv4 z)LZ-Glv-TbT*l%Y*81Z}R7^_>rNYeqw&RN@M5njiOPa z;i>HYk{OB>ee0L{i@t4L^lih|CkJR+nysU0&g8pFk3v~NjL>32YvrdsR)Z=VpV=bY zQx>jx`>$?R`{f}t{0p@Hlh)^|*MugRSJPrOI0xD%c8HG;fTjKY{{ESbaz>g{M?@)A zd{3`oUAI#F`){Qphl4!0f3sW}`@~z&ymU@IuNq5UaonjWzGLDv(i`psb6IU&tN@!_ za?XE_Ua?o+cBdP2C*gYd)P>VhL#S2OSKEFUn>E^3;hNuT&+|<^r-nYCzxR~!?X^c! z$V>P>epvLHQS#bL$%<*Ot7~45k6(WW`mzEgf8FkSV&SflwI|*=;yp6=hziL{TG1}- zZC}uCpKs5rxeUiK3~W<|I!#l>CU;d@Mn9T-304O{z=Z>;R;O06=0k!a{cAWBx8yZV z%BP}5Jbb)vqIo5Q=TPu6*L2rugQ5&Rg># z>UsFo7J76+)K1JDW4?j=vAxCx8og_Qwtz&+K{1^(lond9X#ER&15k~huYha2iHl3tO)XOc`h3SF!N_=~4knOUe)h2@ty72|S=-)q`sDEaC;$>RD7 zOIo16Cf!+5`h%(s@>fSGM!h46@sFPYv=tr+B92JNRmTXAo3&1yuLWMx@ItTS7p4&3 z+rLir6j1WhMu|5qz5#Xfpf(`E=2V9GSEQ_}q~Kj%{{Fcgr4ZJR!3~B0(o;opRhh5t zIbs@;U6I+r{^h0c{NICUTSsFqBvtYk1Al4B41Dn-7>*7rXr8;GD-iFBi#`WU5w1T# zhsU&uxB_}HPnKybSzw^?$s@otL%glwl#Zcw2e(otgyVCTv;{9YD-rPW510+Ozq7r4 zV{pl=x5nq?D|$}-AIhi~QfITqjOHx@kJ++^dKzeEr6~oo=5|Xw=GFwx$CO$n&RKTD zGT9#_t))Sl@_Ir(=BX`I<8Y@2x_O_!-dNA1*~Fq~T*5%tG2&Dhyg)S#!@f?m^R=p@ z=5eidpQ<>JUPw*w&mDi%{SE0%2b$wQhh1MS`>JOD&&?Z;bESi#zct)$vjpcgbeK?= zfv1>T8l4FcR$SpTCiyAL+b6p!K~Rmm8jF^_Y6Cn4`>ZHGh0KbjRgs^D zSuKSlGU{Kn44p{L<0bsnjfP3WHaqrVRL!o z)2&%Lw4lI}TP+6tc2m3%AE9QU!o7cH_GWjrMVXN@v^&&aV$cZbbJ&`qn@ZN# z&#gn}V$Yd1;4RCohpW6-QJ?COmt&+mvDL%+EWqXI(dL!-79Z!c5YG+m9l^N@zm4dX z2n2F~?3eg@)wuzht)>@af<&+oYM)n|*EfOq&~BnvhSj*KCA8e8+E%k6WHzgUc`9ac zx@44a&(~U3_rZaVez#CaOee|{&+Eu3&1~^yc3?9(!7nIVi(l=0Iy+}YkMq`Yq>b(L zzEEtYwbKIODOCIv7wV1U;<~IzV2=~mF!ujaeBS`%3yrk;ei)?DBkGY2gdUROtM^YH zHz2f7Q!p+X1G(}a(U^vA4DkIkJcD;Hlfjj)ed0t_u565Wv!TyIfpWH#sZm~7J<%%y ztXMUt*JE@ao*s26UitWHfb|TbeOCEdCREa@L)DP#i@sigeBfIEb*||c!9pF_wAovr z?kz;V;#IPu9?IWQ=eFO1UAHSC#%*9@V)Ee(@Gx8Eu6NfNx5?_cTYTe*sfqwdIX7j= zv}V0(&Q{-;(D6RZO<6kLIDYS9O68gbpsqQgceZrQ51DElHB)|G8aS6G@hRx*V0hsN zVZ@m(aA&nU2alf;#3z-&MCvNj)T(WM!8Uhl*bFh@{v}O4Ib+du&@OvD#C#oWslix3 z9SE2_I(I`mkBOFdy zhWgZUdY~4{Y(RK&Vxk_3_@El`kteHmewST$dw)jnPT*eFJzB-NP@Z%2%4!|eJ={>^ z-n2hBG>~KMboU#CgGy16*}AKBb^=yxcLdAwe+|iREiJjyRHP6x7m}DEF{IIDeaL*w zZ2Ex&HCZ0?ppQ)G)lNm z@avF5W871*+}m#K@{)Ch-wa!8O1RTzY+coCd~Zclj130YBhi(u6U#(Dql~udqvchtQzFMX*sI;7HfX;Y^R^TecG~Jpz z?4Og@esn05{r}4ZuE3RD)}|k0aj+W1Rqma){HT=G&rGiDeux!Vj-ePk`^vPn{4yNz zJEX}L1*_S0SM+agn;l!Vl|L%RHLZ_4zEr`{J7UC}jcvF>vRjE%IP~p@UheI7vVU2Q zwoZ5wp;GGgRqS#P)S{*&j$$zhkkV`vv7cEV#*+uEsT&ALn6A5?cH&uZ&iE|J?eV!G ze`x;rxOi&J52>`S@%;G;{=HdUVdWgNY07FU%rEK-&ORsUjv9W}cVwM`)-b8}~_*FJ##D-f)B^d*}SO~mACT~m5})~qMS5~0q8 z85U2ku4+T*kpGuE_;w&PXs}H@yzbhzWyQ}+vifXMf)D|^BAL^qW-aQi4watEnVp=X z?MhvZF*B8%W&L&GNJDRpfwN*}tOaOyt#6m{6l{sXf$6QPKmgs|ug)GOZ#`pWRfnkA zC1jDRoIN{}MP}@ummK?S$0-NHD`NhNIvA+jQ)wDXpNG7hO zyYvB0FW%8)LA3hHPCQ7&JeZ3qffC~Qt$SQW@8&0>63&iz7X~4LRV~GL`kQP_0aG@yW>PKJ$Y&@poBBlQdqpXfV znoS2WdUTd!dAh9$RL!^lMA>PI-~`2v1O_irG-T&ZWA5K1Csh$%z;xuR20tPz$*$)q zor{nBeY|_cPsF%2vm{Kr<0(-eF82R9z3{j4p8`#2wWdd2F#F3AA+?#EEa8n{RLK75 zH5|{ycKOoWWE!PtIc5TRD1u?O4he@m1+%VrcG0PDF|)P _HdD`n5<@_AzZ{+=$) zs})?tgnFsHvKA*9usjl5_rB&GcOksQL?7l3@!USlcRcsY; zuh8johBQI=>Dds;?Kd!{1x!-rzo|hLmm|~L0*jiLW)gX8{WXGL$PXG4) ze$ol(Kt{_3Ft8p;01C0Xc*~+$&rF9&wyiSYY((oxiv=T%AS==?hcsJ-lT*4e6I?|6OwD~r{U z^cbq$f?2~si3+pWE4NHOk(i6NH)@qk{j(ls!R#R;aa=xN2g&nT}CD@))-4Bkl3SQy`i)kov|~ zYp;SeZDoi4?xT*?d!&-~d77rgeqVp@)Ui4@AdBSJcvZt)E}Z@D=#FHX3@2+#j>Sw0 zyWE~wZwf%&)52}woVCH+br-Ui=OWRcdC^}W;PegBDRirwVO6IX#0yZ@{P?9F|Gvg+ z^A%o*_Ef6Mh*a(HFB#LgUAS?Tkf3-sRdouY4Xh%X1y9Jb+sYHBYThqn;R}38v z`XG0mm6Ueng8ye(LpFBIQVs%@)2ZH=CfH-SPclSKP#{Rbj-`8`u5>Btee}T*M9W`LIZfmXO zt(Eq=;e2CLYu|!yPNBR&St#RGhyxa9N&e0I`MX+im-QHVnX9M{`_kXRG?uK{f1dwi z#K}KD^>vA7U(|l^;%~YR-NF7g{;hrkJFn)e)xMk;xeCilR_Vj@R~jua9;v&TaCE(D z`~S&`0ur+?UYWPkq7kR{BOG6_?OYzIXFO~Pm*$be6XzZ8pW*Ye-(yFAnK{%RHKwmf zukG=DXg}eBa!0LNG50AK1TPeyPMQivY%ioZHc|zJKm9ugrA|pLXZB^!fO0j`LSyv>6HG$wXw5$E|Yor?c zjGQGPCBsZpGh~jL@H1Ai`vye7T(Kimr2S#cTG6;88qo824a-(79K1ukr!6ZMEn|8Z zcZc7}hWZ^rkFru1GGukD)gl%<-l2AiBDALmroU0ixcwT&4n8|aRZRWsc{)NGg`h-- zF9(ec@t?Q5^0s^Vuo4N9C4OMQJX(DWd&p97$XRyHF$H~A!!x=h(E=?6DTNx!O0-RuRc)vThyn7z}ggFW_qGXXkWi z>>mQv|U7_H#UUKWIZAh^M57A9yKBCu&aniIo-* zitV+;$_jf43#h1)7*&{_eAV?J8dwsNP-G?$ltj71tAM_(0>m651|Fb8XCwtWwaxy7{O< zqQoA97;`bZR@{3uK)M_eRd+^O#gp%?+)Y(+q;zr8- zDoXNrj4c%*oaM}yq^f-<149G-h8GR3hz0yJsge1WPld)YGiMc8CA830bh%^J>2i_W zLQ~TzKWV|*#YC`6_5b!Z808OR7H1uC*~yxSNl@AT)`lhh%*F$)d+yu5aKlDcgw0Se z=o*}==cfj`jM942O`xjCfWKOnR%_BrWkAD#NH1xm|Nm@&rkG?3`wi@Ws)RYJa=MI& zm14=K8Dtfv{hOerL-KqBN=cO^U;l9W#XBcTKCmD@aFzWYXBK_-q6uSg2W%3~NS{5} zqjhaTJH&cPv7b^`i~8>0Y+(4>MC(2b_?;5wj3%$GCOX_s9n5UE?;P=&bnmYj;^|tK zJn+@|V2JKAPvLv$sZ1M3 ztd6)#b`g{`2GbYgYZwkZQ^OQV%L)#|m9Bei5w@z!TtL+?Wv+y@hYpGLdT&}Wd3ae6Asc^f>rvqj{TS@x9s-Q)) z?Bq_{7Qp&eJ|d2bVty?dZ=E-^z+RZ3gLze|c1vvSFbOClN@)~B>Dq14`f<{jDCCqX zY<@-BNx=dF=1ki0)Qfu**@;}QX zIm_JeW#q+Es%gxhzH=FS#8hx3Lc8}Q9d&lU4`U3(>>^%Quin?MalQMl6iF89xy4p8 zZw>>!=iiO$Yqd*PpC9$lVBb3GF`Bm~5+gKib8^}>_9%HNs+0BDfK;b>Pq0mP;Qi%$2anE0I?{8>3^QhW1x37r20!g50(>&fH@^&QYk%4BduiU=U1|ZXS%Btw; z$^7Qg@f>e)ZQUFY_?2igk zF%g-A$EW5Ne!d${yvJUp(2oFqnN9^vGmPcg4!73(~xF^0^@d;<1?K zj8*%=Y5vy=u+l)@Y64mf84ILfrS_qu6bxtyt4xMgL&hUjfPpoutG-^ncX%{{v$?SM zq{kv;mdYF#Ie7`!Am7GP7H?=A^{Dk|CoOYUqvd5fVf(3XrXGKacqwdkkS zS}@r2FEb0kK93IW|NHaIAovV58G?*alU3UWau7wg;3_(HmR#(*3f5aPAcpOnm1oC^45op~wHfswB|k)2Lh~G;+Ni1j1cz{RV`L)LCf*y|J=GD^~(<0RYzpcpXYa7KaXIq+}hunnN`-`Wq1m@HW|Li zoU>e!scmus)P>cJy7ZhCrkrJ(R7_t0K0v|0mr-Rs$prMeI-}mKkjf0kI-`-Tkd+$D zbw+cdLSZ%<>+}YNYSnD9S|+Iytych$Wb(=^>U`Gy^;`O954hgn74N+U(g<6` zK87PmcUP--#1p2&$cYuvsNKKf_0C!`ykXiU{(6w_yVTH2{l9ehMrh*;8c~*iTYA&H zx0^ppD3cqt1bJ>(s(_uzcc$7eYweLv~C! z8`dE&tpPhq!K!|8b&dPaC;M`ro^;s@2KFAITyp1am#HI_74u9;EWR^|?!64PyyoU`>nO zDO;Pe@c*WyGDTev|47Q_9X8^3kI1Pw=HIc<=Bx9sX7xv3E1XAy(3bLs7KtyjLpEP_ zhXS>>)VgZ@-u8ua(!6tq=VZ?e#p{7{hv%hv=Pm45EU)b=`?#z+R=m#mTGAWz>KSBT zRBA}gS!MA)w}TbNiQ7gjTN{!9<#QEzZiL${CzhLCe0fUl8jEh?YmF8=@xMY+E;4iZ z_%=;G>yyci{qsj0AMR=ym|O>@v*JN!Q=%?m=J$1ebzQ_6?ERS^-mx;=81)G@wny~d zG8yhoAV_f+He+<6A^Ur+xnxi|t6HIM$Y{tKL@D(r>)UIr1)ixRe?YuH2R=_2B(>-U z+ixCA9QHSBAYSK)x_EHaQ0;(YE!AnWi@sT%_URx+oEC?^ba};I1Nx%7@Cda$`I`^c zELa1Z?n?#w1$wY!z|h#Ge1Wd@!?Q>glqKP)(=O7nv_g6(?b<$~ht1hQUR)X<$!T_s z_u`i$k0IN%EpMMa>G1cLE47>>t?J3@zcKU;Y&r?2Oxl|b8F&V4tU|CJXQ90kQ(5`8bhMLclJ#%7 zu9n5KrDO@rWiLp&w@EI!b2q_e5)|s|d)ExFX?6&(dKtZ_5}+!N2G_vw0~+tn=jA5EG6AjaOPe=FvQwi zYp;cs{1wel8-8_xG6jqXdVS_=3mjZ**dqW~?u=FM*b%91^;h+(W!`Dx1(sNJ=g#Wd zI(r3L%{LVU7#;7&9|7eS$2^;5fn!F+T&sD$L&Y6HG(OQYd=MDj^Y@~^2Grb={^<0D z7WBzbT5#H)LcMPpeGXBd0(%K@*BUwG=31S(%CA`ceoQ8Hy6Q}9Qe%zIQstNL`Zy*L zzpGn@(BkPA%efW}QArx`>Juz#vXUiGai}W_btR1R<+6fTj)57N>6G%gE9GnwSY-zk z__Y63QeRmvwpVHnq;+c5%>mR01({7wJ2@$G!@h{{~6_ zE&!j}H+P_Z;0D4u1F2JA-_#Gz8BCe+xej9Jvv-}St{+xU{A(Poff#xmUGFRE4?@!( zbAZLOH_j&yW)00+Tw|@T_6q4;)p|7*AX(vQ*4l|)e4*4cYOYJG!?+jCRg;ECqS3!u zPd>3belp_4n2cg7-e(m_Bqo!TTI#h5L?cuu-72l5c<3g{+a<2o-I7==?X=o%6ooLQ z&t2@JwJ(9_m*lK);CnGdzc^>51A7tW14(^Qms-eV$7vq59R{9aNu7f9K~iyL+Xe+% zi2f&!lB@!k`d*GbwW0Qs4Pl&F`P<+8GZSt7BmVbKi4fyruN70(_Qd4kvYa_L%~iXyw`5++N-*RHXrJz;DIPTcRoPN` zLj~?l#!`Kt(Fx->DN;>b8^Q(rs$cr_c7}2LRqW z@HzbPZ};Yx$={Q|qH_(o;bu@CG%q2uDRG!j3286Iya0D|%3t|ymd07;pAC)A^|fh} z&?uPoV&Q>>4F6x(|0J?~k9>`DyboQCzd1+d9nGzWqfW-`sjq4q!$9xbnN2e={*a*L z;K_YH_r_WsZGA(loj1R7P|xG2j3JATIlsg2CaJRlJOU0vx1!lH4{B62zH0uWWyj}O zuhjYVOBUN}!nGyYn&~y!;=W_Cy2D+)@n?58y(4P9^;yaDTX>&-Wvp7`oqy6&`e`|h zqEs@PSM6Y$kvc1y5fhj~^#IEj%xI?p0vC;HsgTO5y=-l%nxL=o`{)XQiaB~!hX0RJ z{Aby0A5l%Eonq6irQLf^Dd$Y4emUewOI3(FQsEUNbl}%&O0{2?jZF(Js_RTj#6Nzr z$ZlWka$d4UcBgBxOsh1zUTk-%SY3duPotLg_7t_c6G%~OWPPKpE>+pLNz=$gj9ijQ zDr}X!5lQI0H9jHPsU=ev&U)6Zl=rAq^6qYh8t768KuA4ZN`QaO$7Kfjd}heUtE%+! z4B+`G=;c;6KjvQ2b}EDo1&#b1)1YG!v4~5`-HJwia&2z7{8`#|ei=y?AgUM+WXe#l zUO>R+BHsHH$WtiU<}jy|rRy@f0vcZLZy#l@A{C>zeO+;ug6zY6`(iHxjeqy_N&D*d zeyYkq)JGSah9-15*V%#Qaimzj5Si?lQy3%BlVUb@k; z*)@&bcJ99up?B+^Fj@6wN`4}eQ9t`uM2`C>y*d)tS4yPp_{7#8Ynn?hv5l%ZWDRT_ z^zOHHTk#<4*#AP*WoJYp54S&zKB%-7>cKm~hMnS*9*~KzoMj$Bb`t&BE{I`g-bRmE zJI&g$GVEyqa2K_T;%B4ZeLFU7+C}TMT6O*|>d)OFZWlgo#TR?C%Z z))p{Ye)XC)pz`ogT#T@WxHr`qMMQBfD6akz55(jQkL0-2# zu=Mi5(sgl&J|L@~m0mLhT46L|Yw^l0yA@T86pXCUHI0>#0#f}kd3 zob33Q%>y-}4?qkDq@Q^}CP;4_N%%9wSvec=fhSO$bJm`g0OlgP>Es*f>poP$Pjzh< zDp#jFlStYs-oa2-;^@-4E7B9}UemaR;XXffTUK(@{yOV9?rBkYnVj z6Ngg@?#u6;(l0tvo?Yn_H7|?AjibhbosJab_N|-Uw>Gz4W*wWZ(V}kvI4s_M@4!>P zQYZo!^gQz^L}Hy5eG#lxs)~(lPxXH@yNGweKvTavZL)feN+Dv``SNmBNM3ZWxvb3p z#(QgN!KHWlg0_&ogV!HY4cRH6Y&+}&Itk6PCGF681-BVK$bsFKv8-JByV*EJD^!+Y z=;c>M3PRD&?&Q3pvge%ilx0Pv0$?;cWu@k$Rn)m`mwmmJaCzr0-KtktK;SEHZp#v= z65azT0r^XF?vV>Wc2|uov&TDpU|KyLx^vN4shi zdHH+uZgUoITucN<7vC=Du@{^K_q&T9xC^$a#y6$vYyGH$>{Iz%og-PwRy)qXH#nm$ zrBk}(YqXsmub(vx98Drmm}yM*uDX_=@}=f!diJwBYFBHZ+eX)pZ%s*5%qzr9QQ%9x zg%p2LT`WpqeN@z~ONM6@S9zZ8{u0ZY!UB7P ztmL86H3p}+9$n`>ab?KRII|OI@rfVC1jh&5lL1JIp zwWD_LHmRD>H@XsVl_{Aab~0Z@H^&jGwKyN0jm_$c$J*jUYJhJi)kk^6<0-k@LS~+) zz6^4kEvzOqia?;;84kukkFE{hu3WutWN%6yu5IO#TWwoP&a0^_PI5q|Utx3xI=C6H zUkXBenRK}zbt0@mBYcI$SVdl@6 zY2P!KbFlmHt^7h}Vg9o`WCh~ytN0Q`ZxQlBI~Z4DlQRRUIX5KKhD zC;3@dXD;PQDqhgNa=7+i-!qtjoKjfuJRhqZ))0OK3!9@$*oC9vvO-zU=gGcb3)#g{U3NFbtXftV1zixM3co~Hb$BdW<5TN}uW402 znQqhd#E@B-7~M2u--ugKL>BW&K|+)#u+@@OYQ@@&Z^a7-IgsYUT_2L&2|s=c)TE)*SY1gq&MtKp7qctn*;D;6KBZD_yT-kfrH z+DObNJ|J$wApf7yDds8OS6usZsHd{V@Yh>^#v&H0i_(xLV}dRVP!%dUF_}^98zxn~ zwDVS>>ZIY?ZC|HTW?LpSyoxk<&=1LI_#?Am@9Qfin|5YRO$(@BN=7cvck2{3)yz{H zvp8qzk#wqWE@0bwz2LOqjjY14`#iN0ms#_rO}|C388=|fGabOD7Jb(aoLic{vK^=6 z%!3eXoA9IJTyFd0yODxJ{=#Fgr^Q8m;zwVXCXc0K9{I7qeA%P?>+2TuS7IZNBx~@_ zKz>=aDg|m4GMNv4t{r~TgGZGzn3mZ(8hEttK_E`V^MLen%tJr+*E=K2Z`>>Qv#P>j zOK0`G8W0@ll1Xe}#24g@#w1Jcx-(Q|WtG9?l4(#c+8Gk^G z5&00tB--y2wNfgJz36Kx&+uhaOfWDqFK)tT(s^kb@dGT|P5Jz~j_(>g$D~NUr%0EyD zlluAP3XNY#)7JAvPZSzBU0v*^=UQv;KU`gS8Z=XM zV*O&t%X?LgEjZwo9Z`=r)M%gM6||Jis-az;^kn{s5n(@bxTXSj@)U_Dx2nuyl_!Rd z#J#Hg&VHU!%1l0!QH)S-)2MgzYX3nxJrtGGPMJ{%uPl%% z0Szk4kIR3YOsd8W&lo@@T$g7IEz4Q*T0SxP14W_b`1B=-;QX4j^-q}6BVz4nc8wa! z8k;>giL;h9`Wo-dcG&iO=Vcv81SRHyP)}wfKgx`e0&YFZ($MT(K7t1&%{aLzsF3Ov zDJR9E2a8E){Rw0S(_)#qYjja*iXzr$!ct2{`Nn zzxwKvR(64j%lSFIQ(!urGM|w9IE=d|ijuPSltBl0}^62l(p#&N?QbMe%b z1@Z5sb8-jbT8rdyR|u{)F8ArpLiW||!Y%kuGJ2GorS<+lfwipq&b3p0;H@|B6S_=EZuQAO+xtI}Zl-|UZnt$Q_Gb6l z=uMuIs=qzmejBOX0lpF`GC!zF4ap|E5l-{LQ3G&HZ9Z<#Pf9nMZbaslV_M0T8@Vi`Q=F^6v5Wcj188Zl+K`x#^Rd zSWtG~m}~5ZWEKfCx=CP{S=eo>*qhy3rA6Y9%}^$xw^J=0;I&hN%qUPpE{ML!XZ`eW zKo2*u`M5(dP;6SnxS;VAGo$*u2fOwHcJFn$SNfU>$p`d^V~WP2-23!QodG&Dw}*PP zK(th>ymq35UBqEGYYG%WybUKcekMFH48`aG& z9}p;8qCW$>9S{1%g!VVnC@@oc9^t1P=QE|*v7T||Uf9PN4siZknd|~|WCytMEsyR5 z#_PAVHkLNP(q=T}*V?mt^7tv-_^%h+6&>vI7j_S&&>JdZt})#0A3Um?sm9F@W}hEo zIK1iX9?{bZ%w%lw+JkYgJ%o&(R4m&a8Lbrj3mXbYjP4J*`w9HP zz|BACZQQ%M{@69$t)m@>8vFj$rGT5N0p=QPz~iuP9LVmzw9eb-*inTXC-e!5Mv20y zr-k73VTwG?INL-dh4Y3|f(x!+qKO!hYNX<55LoXEw_pC@xV}2q;0bwo#T4)&+&3UK zc7l#y3kz_o*aFbJsl9OmMbGjTGp*=JEC?rzKLlqCx+fbQaMzL3>?V3^ytKk_fPa(u zAz5LUxK*yEM<4EL`Up*Q;c7{cx{vEtV0GL+m`=RappOK`l9U8n@;3_exh2%m96E0k z&raeU;1+0xx73u z{Sg>z2gW;rN&GouydkJ12+kWA0#46iNlA}xU)u8uy@H?a2+#xlmcvFE@;J8V5S-91 zf$Y9|7HPkms!=4}6v7$zHX@P&^Yn4S&5PjTp@iUwo<%ejw>V2Hn5p6Rfo~G^u~dPKoFdCR){9!jMikC;@_&f8{j1{ zstO0RaMURSz1Yi^mgVW?(gSo1PIGA&4|y=mBwa%ULBLdXFx@8I%n6vMTMAkP85Yee zyGQi20y7y~%w%pcQ=mn+-9cF{zH^et5&fLtiVKb4`db@OXOK3X`c7cNC}H}@^SmKR zcZ!Zi5?UVN^v4TAGS4jn^Q6K8;jluMwD%dAD5c$nW5*%_W)N7&#Ll?U{Z2v;f!|5F z`8&zYdRN!)>!!Q)bW^Q^fV6#+b{4ZAs#l*-+x z{^Mk`eA$spdN`0?0nUR4*`Dn3FQIrB}k4w-|!UAGs%YXlT4mtmMxQQ{`^6Esxs=Yo;#*I}Ik} z8D>_(o^0eR789hP$DubUN=_J&9IsLxt-wsiRc11`RFh>Tr7~`nbhSTAXeFhDz-e{sGxCPlH*y_a)37TR= zg7t1hNq()j_U}48E*l2w{BZ@8(3Sl#)Bw4h@kfB5JY5%H;Rhc0nn}+HM_#<>rOa4p zR{j+7KVF6#+!D?ejzMt`4J4p4IfsD1)0 zZq2DaJ?;M!>P`bdL7U?yVsaE~U{6BPt!ljbtrzXOa8v6f8}&QG?Xy3|Wa2+P01yLe zz@uY2d3k?uG6nN8D>ej6rt4K*51&Cd3-@okITHmQVUfYD^KmoF24_!;8bAztGG)En zfgaoaQ~`@naj?0652H92@v-Nc0;pMD{qR#T4Vjz2Q2~(U6|n>Eo<4O4NL?r1k0YQ< zH5Z!UF^!1xnszbPq>qibTf3t1gv}l#)mVq{52!o501^a%Wde}R!f8NOou&i6L3Km+ zZg`ewU_ElxH~aRP9_}wolb8njYE%%epc?dr(-~>kGDh*XM?Y+FVUp7gwu%CoGYV_P zB`mTNH(&U8m<}C)qA-D5HL|6t5VWws5Y-iR741OKquuK{E;DsC$mp>HO@YRMeJmXN8_frxO&DOk zq;^*!+Wrh6@VW%4H>I~1!_BgE9wlOfEtV7C;fMM-@IyE&luwKB* zN2ON|<#03Fdmj~GT!xz%*JY3(-g>d`Yk+|JrW7Y`>Gdau^|)npp&PT_LQ+=t(%#N> zD|S)roca2}O(jylZ9sruWl&aO7>Nsl)x=?J*iKG&*bs zxP5T9*Se3|0T}2|`JUT_IRfv9-^6-ZXbKL(7t`CELwkDAqjztTVsEjx+*|G~_tug{ z>2vyObaZYN({Jsg<}F5hHJ;+~thc!K;NGJ2;NGGR^?8b%XaGUIj%s>i?zxxQfPy&J zuKudjlEG!}yS*h325~guxtQ@hj`0lxox`;A3WrTOxl9h5%Q9We(QKyaly9z=9l9HS zmNp;i<|iXmYV=&DJjAaqsDSWPqBrE*U?qa5r$l&51Qc0Z5kHkkZlfwIRAd0U= zbn9yp&DOAPBrWi`nRf>zZ^&1@P>|s6-xcBc715J@@m;?9NhYy$d?PXMeVQEe9|4G= zz;ahaJr-oq69+jKKR8fKB6(t6mtHYB1<3%<(x2iJ)dLf=zjh3K+x<~tY2eC~>d;0M zv=aqwMQCpJqETow>dIP^>MISG?>?3{`F#%`K_WKW9jd)#!GRiM}k(e1!t)x)Nj}Xy+uzh z3kvC%VkL*^v0a{f!u;1Hl0@+Anh0-?fFfU1#Lpy>JLyZ$^vaS}v!$z36V+|Og+;5M zldl__SE$6-XmXIh7$WH82n(NJ2`KWG#ou)hEV=s=K&pO?vF&?Lf~y~6D2i3z{gNB9 zQ{>OtYqbZg*Ln`xiGsGGpuH$)GYZ;`g0`ce{U~GU{a^;jLTT=E^I}`0U4WwicO!|P z3`T!pS$Jxp`(!zx9~FNVTP{Ssz%wbXbynrof)5m^0=bEOw?dGL=*a($tJn)TlkY~TNMR?jwm zE%=P5F@Pc1|9fX2Lmu2;H-tJw05pTgR*3^`^Ej%|T$i)CE;%oQ8>lX=4CAa4dtn%R&Cv%8fwI4L6{tWB8qk6cB0&#PU0g!b^JuL@} zBBBTg58dva+Q2UTz_fi+MH=oCdl6Bw`Mq>jmPf8?lp5`isTS|)pAELo+B$YYPR;e^ zc?RZy)>-oQbSYrQ9y6>}=O!w|aYg=__CR#652cyCq5CQ zi#qBZBBFf@!NQ5B0rdJCx6;ewZA@a+*GOG<=_X#D{8Dr>H&E;khG~+1Ye| za_b;+N5z&}b*MU29olkOrTs8%IrBd`(pU2A86g0A##;84&emh@p>11*Pb1>~-xWOm z5I~GnOUrJZ1yqqL-`Wqj8T%K1NA0TqQU_R}SG1`Z*WdTI_V%->Pteda&zOSM=FP+} ztnc+_E#Sn!O*3GEyPNP`GtjXKTY|B#SDyLz-PkN112{43|F_e2V(!K<=lg!?&1av$ ziF2FR{t>e`>`!sPvGbQ6a4S5@EVpdr=4fB=89vL_@3*BoWR6-VM?Tp~>B4$dN)rlv zmf}e<#r#bLeN&Icw95&CG4jTQvG0o&b!DzJL3Aih7c3^D9+QX36mw21D5aQcLZ%*> zX&1jS39N!qpG#o)3`HA_ZA@AU0YvXoyZ^4S%WeitIP{>gsekeJ_niN8{OS)@`ClJW z+uN}>TyObbr|x?}($;T!Eq5n>z`oH>5_EAG#b1Qza<0dTm zT6sl_IA8^@w;pG_m*fCJqtAb7E!_soN5s~Hov*VSz~Fzr+m}}WroYPVQ`PZ9M4#&S zdgK07gH@kr|3BeB|0^q01Mm4i9oU~6#b;Lbj5jCu?T-8p8koCSf)D>+zgJ(pen2ky z#-2ysejfbz3;$xK{u?;nu+JruvNG`DeaHM zSO6S6{Y}_%+XBSIS36XF{sPvMfY?);f;xm^ZX*l9tB7lIcS46+$z5ct!65a|*@9Wz zeqiXO&Q~9V1hP#{`$CdKDoI(^vsm)1Hn~%qrA}Q6OXmT{im(?=0vXWoTJEP;k^1FO z${k^uB3JSGz+oBi4QGDrS*@xw?$p9{wIqs#u?nTQ>}XNGtiOcow&? z=({5Z47=66*x*@hs77t8ZsqyH(qKi6IJcH_d&C^f%^@z1KkKy9#Z~OzQ^n8E*5T5? z4p?=-23T+=?V=7fo=o#eTc#bPoksu4yMNpXSUcez-qWreQF)56SDDfSyoSGy{wv4X zmw5S5iDM4nwaP;Llcn_z6GTAgW;NxSR(cNTst`PCWC>>uO1Z14t188I%hK65m~pXq zwzz!en&lHLm(WdjI)emH#RCvn#^&-;ZG|oNfZVpx;2J0_!h50bEc9J1-7(#xr27ne z+*kGFg3WHNREs5!+E!gs)38v34Qk|A?jY62&eC2I$b6UHUXpoq)8=XO&=yy51KaD1 zB!6pDXZ3XTbnSHAbQ@I(oVjN5?p~Wc862Bx1hFMwB8zL}4~MNV2>yu|ub^YmA*H~~ zt`pP^SEUXo0+j=GURC=7T9q8!l|kxXT(ig%0kvLD`$A!*$63xnKgGpl2&n^#?f2PwRGVri}*tW)x438 zGD*wI*}$IP@!%iwi~{g!wy-YRJj!i*fO9N+Kf+W$6B0K3ou}GQvgL_NwiY3Pl+JD& zQgY)51>v-cAGMzAvk}Of6!#n<;I>5hvfhE1nYqUwMbcvG(d03nx8C1USN4?z{-J^5 z?M;!iYpEB8(?5Ld)cj7eEd}Gs4FtdeA*gapQ+r5qrM`6jHk2&ZU#nQyPrZW=%q8E)Kmij78wUq1lMACO!bj zuB-(mF_ERz%}6MO)Lt%O+SLks7KDAa+*ci5E@5YaEy0!%CCta~`z?Q0Ec)}1ySX}? zzVjo*8t>;Q=VO+^I;h{YDLMqdHj3r5e}i`+&7#Gz!7x7(Nd zZY)S33rKsmk$O73z~)T6%_0&=7%THue6FL+oE>jp4lM}^3Cys0Q|dT+wVrhuslx4=9hcosLZ}q<`hXcX4yy!8?Psak1bg_ z#zfWF%{}jYQCLXmNNh_>%W{Td7Cyk=#-))>y^m2*hHvtE`x}yr}WQ!3HDjsA$Vu@ZB|?sSEXqBuizh z4`Ko@xqhfN+%u>)lKBns-#EiA)<^;BfH7iE<*D;VAc7HlLw?P|UdWnjO=YtiSgcv0 zq1QK>#uzsYGYjylA{_WO*PlieSR;YT;k*~fpz6?vtL|GhOVl!%sGj_4Jl7H*+k-;c zB1F1d)8(_Is)AF-r|*PHlW%NPWh3ZybaD8y<99a_f&Ns>20ad@yIbW~;OdOVfa%v7 zy|C$qR1ww^r7KO<%FL?f7JX${HLz}1RWNRqx{B#lvbA01!5-B3tMx~QHSMpbDIs7~{AM))ezV;M1Uo*(KS+GVg|p`?vrf4#2xEwqt-Y-8N5H zm-{gZ{i2tY&TNSm8L1dn#a2Rxl+BW$oqYlv;qGlDCcNmpJj-Y^TaN;>oM$jaKV~O% z2Uvh-77-xysWe<$74QkoJi3aAV(0?&vLAk}7#)N;@Z z)K&|vFb-zGSPM&YatuD+s5HLW@2n*Th*s!XXsbAnZAX>WCs ztmIofN>z*sRFXCVsc8H1Ig$%6$SAUaiX1yS!IprUFZl7ww_s1#ILWiCE}gd z}AKe-vx-B9%#w^Uc(Nl1$~;cWGQPmRQoT7FkVdsueyW%#@*l*$f#0 zN5(b^(lUEK)f1LgjI7Pq1`AgaD`z@ZVIRLS{#5uXOPDqS_(hR`ZY_5uR#Au2Mk;)j zDNwL54cdBsSSUJJQx#9Hm|U4i3p{PlZ#xN@t)Sa@nSx+e0_HJdD5xNSojB`&DVa%3 zzJipAH`uwV224K9({vITWkR^J)d-Xj@4RX@ZeMvrM4~LrqgnQ(@|po#u={t6L?3_0Lgi=~!Nl;BEAO+)M!b^e<4h3l+Kt5wO$F zt)0$`vXnbw;z$FUW=oorCNYWLE>dpAQ0^3TKk0>2$XdWprX~m?S##AoJQuIgU z`=N@Q45Fk;)A^rTfS1%phke!vZ6;Xcrq7MpPA?`h{u0%h&tQL8@o8>y_tKm@9w2^p z5Pq}$d8uccgv(BO9^eILwt~&-jaUWic7{9eH`7?s zeYC#JcTz9mIZ@Kax=%H%0w^Ooajbow&B; z7?>TnixuV@kw77G;oqJw@8EHe!g7$LH}#Y!Pm!XQycx$a7pPQKB=9Y?QCmD=)=cC9gqED0wfkAK|i zWuI!vtRK}_^moZ}ipMbjS{1=uqmS6#zlUdQd5>LO)h`@*K*LlowakwG5;wn4 zEVXNj^~rH}+)JB}T6>qRM0JO3K9!pV_N)_ec)XJ0QQpzZ`CZ@Dde<3Gk0I+5Sz~Wd zdyk%_6)0u`BRe880elz#`EKfcvO^B z1S=t%wPr97tB7a##Q0Bt9a07Uu-I~F;}%%5_xAs36(IX^ziekR^rPDJ3~b(~`}Pdo z1u7aoOSgO-W=R^oZ7iF*3Plt9bq~c0#c~CfuO5FXizXUH!@$E)}g^ z^~2ig%MWbxDj#k``*D@d8^hYCZ48FjAg|AIDri|B(9z`{e~+%_Umo=O@K!D98P@vY z`&aW&QIu}~P^_{zBl1qnQ{~x{^KQDo5b%?B_7a^6r%98P|z;2K+}CTZy^WQ)NrMX&cv z^FxfP8~Xl6zk#hF&poa@R@ zh+QvEeVFEIy#vc|w>^V*@@%~D?utI|$5Dhnw__&M zyI7eptNO`uZlHJ4QK|rh@&4RNFad)-00ds-t=u?XT47+Sht%O_pQJe2vlKlVN&RGI zNI!X)+uQ4CDpEbtsK7N7)}mpt8Zw2Reu!IbJh+W`Qmr0u>NXW{+!4k)jARQ>^HOIE z5(=b8iA8g+(&D(pwCf1IO_IW$p#I<6CM)2oHF8(+Rp9Vbr^{kU)N2Y0e zkLvq*#)<^59q@U|yP|0oJ^yWVCv zGTGr4kBM|Yj|>zqk_hh!U&R7&%C=W-_G>SMMG&InzR`~hiP!OXuSozRFhWj4-GLYs zWbF$;jZX9d1&l}8mU&`5-mm4bovmVo)l?@|KytfNFm92SjrpraXV5IpcP8c~Ou+L6Utt98`eJp-Tx zA-D>Hj9LN6j*K!Q@{YpJ9xn*KN@n+yj>)c(X^)7a0Ut(ogR-#nR{#>YBH`f|P1BTa zZACRm%Q=xF?6Nu_E^$d?2_Uc7LAj7a_{}q(atcNQcWhOVx-kTE*$Ofp`QgT7E~5!T znXNPMTAVnjhb}PFaDA=hVq_IpGF_tPIpDt`z=@GW%8@)SY&t#~h|t+Q#j=#k%ulYg z!<{jM{F-VeHZxL>D>B-S-FAvq=1?qa0pHkQ ze9$54>H!jb$o$Z=qv%7umU(s*#&ZDob*V(!sCJ- zL9k#Yf$JELoCh^xWl+SOec7XlSylruW>o8wh!uu=XzdB0p%z+n@tSCZ$I}r1Ahb|d zNTLgGRe&KTdygmzdX~hBMeAhq3N2N>rVPq?BoR<|Qpf~pSWzotW0xQ=*hjy2=Y)r3 zELDu~K$pv0A$X%&>u^XH%#q3$S6hg-9Mh{xSt_1WkN-!eLLQ>oha&#c2Oq(gX827) z8Yh&g0+4Odl`@qPEm`=xvRlT*EfFms4tLT;dbL|skQu8b9bGOX4G`XY5!C5oMpn1Z zoo9nSNnd5^3*mmaAjo3EBV%gm^jc&6d*uE%KnKx=h?HLH|F;1=3MHrTOX zsG*B7IJRTyehCTp1&T7h*vT*CRPw4yL3qN7R$my-ew}O}Vv%=zfr&Wq?&7Zl6-~2v z>Z;^zaG}?V)`dx6%>i+u6;n+WzZsGV<2QmIvJ8aw7lpBsAcFOfd!K6!#zMnvRPykA zup}ZF(fK(KJp`DX>$n{Zh|Yte5_*TPvnZwJNJ|hVe*G8Ab^$bIF*n zeYD=yVnzfho+mDHOhyqwrtqM3!euCYls^6m4ymN#(+WgpX4WVl*fRh-K*Ya%=+8$W zyaYkiMH*5?m9PRFNB}Ab@PLx?SlK?)hNg(FnH^^}&Z3D!WuF(F*2?qllSs?~cAQ7r zWFH3X6z0JULU;#-tEQtU(oVy160O%nJ7rem>p&{Le4AXWKgpEL1WmjY$^)s^nB ztHOBI*y0yAXWLIu9-&wZ7tSXDS~kJt4Ls8{sUVYNwC#?RC|LhEjBvg*eW=6Ed zqCdq=sq362KR|PBR-$&JCC)JzaXAjW&Aw2oN5($$DB2Hgo6g)0;}+(-V{p_yhrWs9 z3@I9MfqlGj0$|nbR9>TlMVx0mqF_OT&^&ClT+=3iL>v6CsEM-*wc71d6 zYTTPgdLIdoBAIx+AQ;|9%UrPs-dEUSb!<_MMQU{3f{@OE5~ww%&x{Y_5MM5|Ct@1UgYFs zE~tCz@gX7*bF0x8HuIrMZ+ANw)4%s`*VzQ)2R?|bRLbY5Yh_Z`)X{)(pq~1MwLmd6 z`f2d-qqZeDdw=`+^}W5em)>(h9rkx6J^==#fvX`;%$&-majj``zmoGxk@qfCTBq{< zxvI$HKLfCSJ$-$>Rbw?cODLDM1qRz|2XyQvU}g#p$txtY?}i>*@u554bvB*{?0C(q zOy`uXMvXXD zDeEWKFk&NGr;So8HX-w_EX?Uqln;f|;cli^Z;XHS_j#=3Z>x>|n9Adcc!zpS@IL7W zR78bx(Y04pH^@~_Pbm&@zIW1lOmWc&0_0#9)9e!Zq4~T=D8j1khgg= z`4uPl)y@aj?k~!MiBlR>2jZIdVH8`OGerxt(W@ToSAKA*Yr1r9QBU=V-QtOPe8pj3 zP5o=c2f_}8G9d`84H?{nm@u-(xT3N>4m5ARIHk+*TydJHHRZprcU9zEr6#=qQ!?Nm zOd37lca|~h!ZNHIO{7flg>0{edZty*T6WGazoUkQ{*!N5!@>a;?+Bd33@3)eu%?N1 zQ)(>Rx`$2#+hZUBG?J7Y+uk!VV$&Z{@$>D50T>-rw|h>8X!kTnMj|JVi#7jGYINop zNY*C;4++zJ$O-&&rg56(;WXf>_b9Sy;)wYMEk-#g?hu?t_8z=%I`!{%xPsHbB`XOX zV5~bRmyG+q6HQAG$<&Z>o1j;@(StEjeZ>Hk)O#6zAVXK+!ev!h7UdY>ivqHTvA=im z!uNLFj_C$zLR~~SS7=U|VBLI~EPz~z>$VwMI;Pf?qh1YMWf87`v85~HZzfmDcWNw}?@+eQ;j2{a@(wv80#uio9fy{oXwB-N za8Ul5W26=W-KoB`P;^g=wHv8U%HmSvZVM+fW+iB`uG}aeY++`te%Jnk?~V6I-jeb) zvUAL38&nTT&s^I~0Jey^lOz*N528K1@pR1~))$dTW?z!Vd?kRUn%x}jr8|TQ3011X zI+KBB-pv|Cif-B4o9(Cy(N5agw^TKC!a*V}k@ zu)93V+GOin{^kqzz4r9iW9 zDLDge$_l82u-($>Uv?rjxxus3wk`?)>IRjrJ*o$sTabI^!6p4n+!9OFU3HU?zW92( z^uacQNOtRyX31@iQOursW7LfCB&j`wVMi2v4GJ>UK@SNNYg@=L?CzAYw{y)4jbUeFBN`8Z zy_vEVTS8EqhlTM5RMm$~k!91^SFn9+E-aSw^QD1bW(J)5CMDqcDckDNLlS7odxVL^ z-h(u$H}HPHF;e{o0z~v4phX!LUK6J+=(#t`ehBSsp}PfL&8Q$KTkiERhXCP%_RMqz zpyZ71ZBr#-xerqG4Ki5OpVI;fqC~$+>A}(laoUuVd_x6BoAvfv^OiSH1Zb))r|Kf;N%n zHDL1IOh;=f9fySl9jNTO2_{pDkg2}LRgVWJo5f?Cz)~5%9T9~Z$)O>3A0}1F664mf z#p3m3iGu-3(4FIDra_-e?({1zIgjMHG5Qv+Fx3t+=cubX9paL^Ks9~w# zQc~FLUKR(_U@#9DmWiG+OkU`tXGpS}&&F~orOmPV;v1%J7Hr67S*hX+^x)5vWWzcs z6H^Cxju9P3H>8oc=3w1ttrQ;CcP!<&+v(8gc?_o~RtAlCD#;2Vs}<%t>$x_l%$FQl z$9JDZC(A0D_Qj4x%#d4{U*U-~mx6OAo9o|Zr}~|_Hpqfz7=UUsCJ(~6It~Dfc=B`j za=Sne>^;>#@Xv-y+y>AkcrvMV2&ZPIW1|Kh&eIJ^;GsYI;oUXk}1K^;xjcyx5l7fzp zVDy&8dg}Jaz0cis2>X}iF-0L;5A@I4a?_yW{@Vwz`Gdd_piph{`+-grtju9_EwzWv|`a7_gLvC9~xbrECk${@2v)? zWctmj^PMKVUkEK)gH%zad->z~zVCjfzt(Tt@9nqO+qXN2%Z^U|!IQ1#0adJCCq2~6 zeWYelV;Cx1TdY?Xk!rr5i)~X1k^)+d{7h0A4NPakR&%0pXO^-t z30d^!&Zc@Wfn1LN>P`CLUBsE7*1c(KH`R%>$kHwJnSD?_MX7U%gWH6UE%g|1dKFfs zA)q5xX~_7JWD^ZLBz<2=F(KsD(-rA5iesD&G+&N>aKq~RB-PQ5I&+{h3w}N{$hs7B)1|Mx2N{K4&5v%qP3I&YOaXcb!bz6B$gp%Yt#S8q6@~HYKY; z{p~sp%F5sPHl@^zh)h@^;dM`15HPrnNoOQB8lV2Nr(N9z@$QiO*6RPRRcD%b8q^-2 zv;4T*o8=l}R7uD*mZ84e83Kh~#=cPm`c@10p~1r?k9n`dfp8H&p_m5t^D-`PSAzSG zKYv`mU%!zp8!45+9Y(b3E2>{yq`HBH3o`M;bei8LXBD+_@?8Wb-mG~UE~t17_u5VD z5$O#P!DS04s@LnJDkS^3`~}?x!NWL!Sg62 zHP|hQhzQ#jk+S1q-P4A$FB**?9jYf`d8-;ayz>XVxqQQ#@qctnk$8ah(T=6JSqQJS z73MPP*zr+0PVn-cA&`E`mbn(OWKn8hWL22*63ks@x{&xi@c5c@hI;VM zIIvrmQ1L#N>XS7ElY1Zz@31n zP3nuWplvPS(AGXFrXll`0NAzCUN2(Qt8U+4etvli68Kst{UK|9r|A@J!ID)E8Ozf5 zm`wt*tF^RW1D#oGaTOt*%i0W?DTQcz3~$TWKYaqNNKCqQXE?gO5QmME z)+LSBUSM#QLQl|$91w->D;fa7Oh3H2&2g9JZKa@TLF7jitj>l=xY2{Ni+SrgM!8^8 zvwxI;K~aoPI~zS+>a1sT5C=QH!of^;Th4IIYIeJnwl$1a^*~<4$I{?NH+OXWfnGzQ zjnt0S8kpuEUO1Zk)RPnzA^#_=gk*$g6SLZ~W2qBM6+V$Ywf}cZetv&{^WKWA`x=f~ zw6S(A6H##?gwW~_-qr$j50*`z<>p;E53uhe3%mCHf=2%)L#ALx5Fx|`+vT2M`GW`1 zx3K%EjkLFNiZDE>c|t!zw1?!bY%BuYgv{zqN&3SuTzxLaX>hndy6&Hs&sLd)#m>m~ z51V>SG*XF!HR9vMK?d=0VkV-8`gPW;z;6CjDF(~G@v`u(I46-GkiO-=!42TakS@!^ zrBqfOL1)FCJ#CU*>z*5bDD_E2q<`Z?fd1T!+tLU@(7iBMbLqWpL>_%AHM{RYylMLn z-#*FmF%@Bc+HJ zXu40>;IJp5oY8i}`c!h%g1<=JB2LkDN{eo+2!#v*A}Zt?>qnQ%1a^CVH`|;mlaU4U z>8XP0ScViP3kh4(qnV2)a7J~2SYDS!PHYw#QR?%$^^*(B^uu5Cc162RX?~3C2uiNR zlwM>;zRuiW0-|6;%e9d^3}iL$(!wSXYWmqY1_75C>$ktYetEqdw$j=5T;y6>^Kdou z8St0UoPg-s7{xM{0{>RzN0So|*KGqqxs!pgYs4w+8Kr)>8E2d5oriZVyfSG3GmN+B zLl_UqNY(rIwl)Ye3KP2S&t9%P+_QE1=TtHKT%u#bPrn^&Q?Ni9$${q45|pzQ4W|oo z&2mj+*pacRyOIIeHP$=!5}SzNq9);q1S5O@#>LLV=%+Sawd~h zt9H&Mw99f*#%1CJfw?ae$R0;)Z=?szI)}_VaJ;c-DK}Y$ImXA>1*Du$BJ_or`(WjC zh4dRBZ0p>B?G~!yj=dU4bRG}}pMD`Om&0ScNfk1Dl*}mY>3tMGR9s~`!Rz1Xl+Wnq zTaM;ZRGy!u^mqhsc5&O5@sD$c)s&u9dbN{m%H1$(ZH2NY+GUG1ZB^QH=!KJhFqv#n zfmBC0Llu9tJ%x#8QkwBRz&=Kt!*k;vgLmhRG5`;G@cQf9{mIeVfWt9V^s|1sp<~#8vly%MdvZLq@=sT+(=}v!P-zv9 zT>zL>++I^jB^;cJl8*z15DglxTHgvBS^kHeCxZ3c={wq#`?P{t=G|Dm+Kp4JC-Ne& zpgmloq)nrO%=_v8m7hf?n>BTkb?o;3C+@_xhQG_(_dw_>y)Ka-FLW-l^sdJM$--dq zE`7?#H9;+70EcIqAhM^A%i80IqsBo~NSMO{e~#c2Y*aW_pM4uv_=3+-GerKe%IlDC zK2rU!PeLJ(Vgz6%4*7d`2Ycpp@nEU3oL#Y?wn*m_sFVTP{i!TW>GOaZA3^xnKTwYw z0{24h4=l%b%8y1irJ=D<=DZ8@XUQ6fLk4l(*EEq7%7J2xuG@Z^NNCcCA%m5TWvBDa zUfq542*O)%tT!|TDNPMSsw9EOGV5;XHR<-SRj{E0g-J2r+2XKw(dUPHMF>pf#HT&c za`=NPiM~}b(g%o1{IKH$kpK1lMtq~`kE!_V%9U(EaYrDDBWh}*OVTTi;KGT)3AKCS+y#!RKO}y_KFTsd`S{q-gBGsO&C@)-VvMQ`v4e5ZHw5|ETumT%Dr_-Y=HXJnDK+8T&{0~`>Fq2+b(T!%k4&VN)*2Af zw&Aw4guIt_h2JVCa|6oXl@yLB)+1rDNaFgPye$=O7H~n9SnhH7XNa?chRsO7V`V+J zr#i{DJC$Uc_x78t7i4$wzz+O=6${Hwh!H1254b^B866oGOh0Q;Hm7-?d`vE%9iI+6 z63@50o0_wb5)rsZJN*3O*<3Kk4B9Q^6yeU@S__0Q#h4iA*7gS6g>Rd{dJH)JTv4HS zn=*X6vZGd;1ykJ;3AUwxcHT82kJAH}tf`6ttr$<){4Qrx%hK*sf#KgUS^bcD0l)*x z=VD)cULU~s{ln}Z5nq21t`6H!h|H(MAC7wa1)R4@!VX8Cq_TuqZ`~&3#p2imqAgb& zSyelLyYp)*-T+cfWGHdILdQKin*`3f zLd4g0@o{z{lOp+QKL9Fg70W{n?)XlpUe)R;HevoaBV@9%A3&dZ_F6E$1wirg4?Q8& z+IQKJjJ`C6$CYY=dAJzF&~A z7s6=S5QdoP&gS zk1?R}I@aW?O+H#N_A074S*Zz%o|=hYk9tP{=0#yvLix}mM3M0-aag|0ML^tT{kX8JDv zpTj0?)aGs|o6_c^Pf|}FY#KI`XIJ%8+7uEuOFO?S|C(TSN`^1^q@0}0V@UA~Lf<*o zv}!0Kk*V2Cv&OfJWkaDU1A^s$Q2?+$MM)c`1yK+s%fij68NK5Bt<$G;AibA-6L<0FHl41YXG? zhK>G=Y1|BLl>WsDrFJCzF*MlPj$)bf4k3X&{@8L);c?d{7D+SZ!DlTF#Q98|yh0NR zt|pxs?SKa0s#Cee;gb!RAsN=8~t&vL9NrcvZO%eq+(Ib4uS6&lkV zS{pxA*gW_5T@G1J_e+JJc$!g!c}*%!OcM5x`NS*kQ19=}!OfoD zoXUK^xH_d4gg{fl>||``4xERkI49yE*3x#NaeJB1=U!DgPv^;ztbktz&(%rKawowc z5v(08goh~mLDrMFs*5L5Eq&zNJEjd2?CH7GTc?1GR@g}tRjT4W!P!D;bPNOPxoA>} zkbX1k**CA?GhCDd?V=PcOPEH&_!n@5)CmhE9gL@CYf^_bhvGo@Lbg zAaZCF&KxqZQm|Q>Bqh>zcqxNrUhmSPO7s3XPB#OaXhPwtE8n^)RpfAhRAne3x;v0V{51o0^auX1n#7dmu4Q35KkF{eO=CQ0Zu zm5y?P5of_k5e^#1Cw}&q`P~Z)vt>1Yzj0Dif~p@(F-e-V(DOdsOL$q#JXiHDyZeEi zAG`2x(mkT|&o|6b2-}Myl!?&XC&jD{o2T8pTn7xC0N*8cca;8YTPDdXvz>kCayl77 zf^k!)T7QA=o%UK9&=9ypSpv}vR~@GP-&^1^0>LLnl2XUr!Jme zxgij9P3%}ZL0x9r`T_=BZ}GPwq&A~%57Y}|6P4EK5xP{`U`)Ti%q&gpSl%Q%thKla zygheRT&V05MnCy#N~+C7@{F)qL6l>ehW*E1oWp0wHDrS}HSJh3QME1)w8Q(6#JC5( zvG_>256O52SS(r{s^>v=!b>6sf$CF4eRuZ2)$3mb4}avpH1Eg*?y~pQs=wsP`-`_7 zh?_yggd)bz_eQng9UdzpG(ahDQaMxZ*wfgaYVg)Zbskn-)DHy7SYkdV2U0OEb{`m; z9y=19Wk_R3%jHTHt$~=+&jO-5gv^&{Hb-7In+tyHw*E8iJS0Y(4^nl6Fq`ea5DaxKa;5k^aEwhIoEc(4tbkogGi;kc^BB{D1 zEffsp17xBPOrsk*byzmIhB(rQ7a1&-a0%pswmc+j=F;;9i>TLK8|@1C_+|FM!EWlJ z>{`2SVwjD|Eraa=*6A0~X|N_YILC`RD=Oi~%=)ce-~7yqR^`XBAxshOWa4E3uviI& zBR~?`GzmkzHw+_=?6mKdXiDu@4v8zz&*l3uE^yP^h*Al`a+S0@9#lk@ZB{fo(GG%h zPh(;QE=aRe;u5fzC|Z}Wi>&>JwSbnjgdWx^wkDMXCI8iAU{fY6yg~$^hR(D z92Jq|2qAzbgKFBN-|yF<%QDC@q?KpH@fItyYM5gq-6X(pC7w?8eQHf&n4CQ*R*4~z z;BfS_t*Ijv<+=z$}W5Oxv_FjJ&!b{ zv0ZiohRl|GS9$A(zETFoG-=58++3N!B8Nty#pToFfzIpfiKrOqwQ#DK#uu{K+2y>z zqfF3R8L=tCGQkGTTFZjS5w!H}BUK^bS@#;DJz#&E*;+qej{}G>5y+`d`Xz2#CnJSI z$;J+#ix*!1xUvvAtg;zUVq^IP<}aBDr;*xCQe)IX^hk}T@xYlGDjS)hbgn6;X*&~w zJq~v<=M^aMU`|r$m^RK}_p_Km+;gSa=Jc>u^kS zG6O9GU8LzeR&bp#MsD2FnNsEsotSpu86A{!%0Q6~Tj}#eVO|fp{4LCg)J_ph^&NaL zok?vY(dy>~R7$gwp4xAX`A2$O1V({IYPq(s>c$s?a#h*+mNdMIih6ukXr7W#ED@iQ zWZkd60gkhiEE5tz%A$rSh=aMHq!Ue;4ZQ2fBIYELM_M!vx(!1pv+v*AUzZQI94zgI zBTV05uZI2dx?Uw&k~KFU2oLa37}s;G%W5d>-LTTlUfP6XYtQUDS#R(HWfi(+b8ipk zY;1;#1CSQiL#@M=!9Eu5kmv$hj%1pj1O_rQA<}q+ia=LATp0?<8qeQkLxhXMsimII zw@$GKQ`DI_m!RVt!>dvzrD#e@qg<&R^HOV*ZK@1xj^foAi1>7Q;H61zK$9m z4yPj;l~>JC1x6-Ek3!|>>u9L2f#i|7d)4y0R)U%{!a}k(Y76r;@&U_2OPek?_h+3m z#SsGi3qIaucHn4O)f%C*GDheSR?A8=>m19hY?Wzs1jLsd2|M?~A!kS+L5j}>MOW^& zaFW(Mk#>sAyJL(jo)k<*;4RMbh5H|@`!fa|?-+YC zJICC*%yPGmoKX4!(y|?uAVTup))gVjOPK31SCyf%+^pG3sxXvd4ZK6wa^@%&ak_>a z95>U=w|^bRPkUib@jO;_Aa=BQhQ2?Vvc{aTxGE?1G<|q-9GcL$LKFZRQR+9q9Sy0i zEtX=7oxSItvPo^Trt=K`Qnh~KPCbQtTs*b)j6hV{I-1&^nbW0Nl0L%lb-(&f2gno7 zesnlGdR|r8I;UC1tL3h(rdbyK7B6{CI3qM&dScFF={noaK~$8d?wUHS=e?DtxZP=M zhKyJ{)}t+F#1$76XlnfrW>G`=0odEO0mR$R)>*mA8L$SBMs@TYuu@DKx7q`+CIx4w zIu~tu#x0YhlMGdGTj9?=Vs2qs=QeqG);N)$NH30V&!8TsVr%|QpD%W$1`nMl-k!0u ze7tv%FM6N`4Al?JBt>S0P@z`Lxv&x|L$|FN&rLjj3xYLnzO^%j0_xG>3e8_>w>>~s zs}bLFmA^EC?J=v0+)BuG;S|2~{pZi4+KPtL<8I)Vv>^@}5v((xHR0&c|F$JrsL6F`padLd<+(_C6B7q!_USN~C^hkEo zi)|-!IeMBp6%$V|T6UGe&Rw57b2_Q3Gl_N|0JSXnwu6UFv9bp+;$|#@69^blyKNpM zJ2167JTDsxK!CN4sKuF6{Th#ehaR@pZdy7y;hX-^);l3DXO5P`90Kg*L zLc&ov1%T4qeb(C5!ze#i)7dOtWn5wzU{1-D=N`5yHjEMSu@7Ll9=JkUBc`!3b2JRJ zOj-$N3Z4oxS$h^a3<~yhDdK5gH`Zb^&5F4j23jO$KnTToZ-8XW15L6`fW|2SO|yJ9 zgW)L+C5%l|Pi)~A!9nc8x|ftIj(%lFzW(K;uPfuG7h!uSG!;O@i`N83xoH|Q2&#*L z26l7VZbH3!8>6 zjt9+SJ%HzxHb5!!L(mIHX#r!xTX?-p=e<*#Y}I`T8u|L$`TP6pCSl{2ppnJCy#MFd z4@B<3qxNRyQF_l`(eWW*^4`@g!QIlF){<02lL_F0SDIR_-NJ5Bo)7>bpEIZS@L9*N zFm_2~Z#0%&A87xt2zO~zW9mqBsuqJ_^UY7>rq**U3&c4h2orr9n^NryGkM&==^Hi4 z7=pE_7Rg(uZUi)L#@1w`on8QMEmeX$LUgDKfa>HCKv$T~<4I6U`@NUEsk;r}02^V$qt{kbfor5%4`j5oqTaKamUluMobnsj*`w%;yN(}C zJLmP-j(J7Cv^2^=$cKBe-WQ_~w39}HF%YxP3dxC4oiR`yVBq+D7xp4C2ZxD+`7_rEpPsJTp~Yybpar_GdRW=eR0D%V__??(GWL*C;Y{FvTU;>^M^rt=%4%PV|s%kO~kP zbfTB}i0DLb^Vb5Kd_)ADc!U{7=4kEDbv!g4Ew#tuem@hZ#BozDsxK!)+f z0dpxgqM4CpE5pqrW!k#A&V4Q%7XavlrYZ|n=WmrxKax?UUIjr(S7}Geh%v!$bAjr*4(}BfuM^D#Y;a+JdCPv>Gl#x~&`P(cI#_?boox@9bS%JO=-?(4ugTunj zq`?V$i?QY}#j@>F)NJu^&BSSTX4Fw;YSSgkYTknF;$CHvX`{W3;=~ksHXX!+ma#Cka0>6>r#8`+-D23 zFp!Xq7qfQGkJXHWJtd@m5$v3Q#!y-uBLdtVJdPmnPaR-yzxU8x!N^PdDSBObWb!ws zY}_1eW9kP5B;4bh0{+@JQOX#9eqBXfCTy}QjRv_{d4sXvu?kc1PR}xy1h6I2b9H`n z9eR*uF{~WfubX#zZ=xd`SyZ2?7fqRxsjPQBCE0H|Cb{E|az4wGK`EgNK|sfwkNKnu z=sqo;4;sD|)G57rN=S;RvhyW_zIc|;Zwf@y)|_ll!qCZm8R&J{ zKq3JyvIhw79rBE4Y#SPX&;`QGzfc17m&gipvb<@X5}?lir1sT@5?<>}blk0H&O{lC%88@c<+4nFE@mBNT=p_`UE+LUodaGmGzXMsW2#u54UK z9bdGF7QvpGLm`r4Q_?k|D6rpqyTUd(4~XsHteg412>BgbiN#Rl?ywEhPyW3xY*{L77NyM80(f!&%1Z+JotO@nJv~ zdVuR-b_i9qzBCOT>;T zX{B6G&UDfP(9~zD>=_IxAq-3oqG7G=DijKsFC>sjiEj}$Ll_)^Nbjfgtn$6w%Xr>8 zsCZhvMz_^xBfMzXdnT{rh6tu*hj*5{ef~L{-ifX4cvl8;_E)B~(+&Gx*(ESzou~RB zn}shdn*TJw?}EdU7`yOp3zFUR1xF(3)dXy7C=9%l*`koXX6R4>@>G zi4`UW7CX%}kKnlCdJ(vXt~n4hTW*`}{Y`iwky)p9u}T#Cz5p6N$~XFSrf;e$AqYN& z-a~E3+2oSzKjvm?b ze8SN*;j~^i*`r?yT5%1h#zeWJV94`RTtc2yOrBs_Ws%8o7kOz%M#~iuHy2h{8mZ)u zn9^iJSTk*5J7x`yaI$MiaDwgKXx;4x3q%($4k9A(&D8OZ`5Com;<6pZPJtyjIMVPq zzNKje+C1~wRQaMUl3JY}Et=L!;XUR&M|NX1tNX^bT4EyJ&00|4Jaoc6(57$CD}?sX z%rQwYA7x%>b)ha4 ztN%sB3M_LAU%%js^`P{4T1@RqTQvks>zdL(7cQTP2S#T;3x~2ELz1evy5t-D%o0%e zjMCxb-e^SC`ezX4^j)4ax2ek+!4d0WgJRDS5VmfTnbEb=u@}?Z^-?&6BX%68jXB?o z(NFMdc5`5aeOgJ%uH7T^DP?ezt;e-K_ei%|abJB}Np&>l7*PtZ2mJN3H@^uU{V0B^ z-;vkNig|PsB2)*f)9V@)=b)V>IM!R=eR)~v*MLbxzsJjC0|f-j`G_cQh3*rAILxt8 zdjJ&sW|>P`BdBo>F~1Gz!2Nyziin$qE}N)!mhptz9pwh2sT${xv7Qf=4c^Da}7nx>Dd?jtPbw~@?y4V#Hd|{t~h6JUsgB)SuNRz>tnHxa|{Id2d))-%H0sr@KKrpBM zjI;2-Y={e59BeNBiMuC|DR1e?QG`;FD?%O8fq+_Au?X)j1Nyt(Pmrdj1drXeXEw@$ zQrO>^$#T#}_xgKiERv3_<1QT<2lAlT=YR!7I2o-W0F4InGZT14RCnL(j zkL?6(=aVtG>%Gljj;NWI(rkxRh-~VS$#>FCAH@#N1^Cl8{Tc;h3%G3dB{gGF!PU#5 z8LefWtfheEP1!T-qE>j4VNRQ+6$RE*1*GpUU13dov*1*grng7VDe#>f{La8N`S;RG zvr=sHiFY&GNs#XIRT?7gUT`RZ#Sd73I<32rbh%)QLaWJ%pQz1^l=o}VPNAi2Wg#4V z9dj}kkTud}@n(>b`(?Or+HQbsnH$t%>f6L_!(!oyq^ex)%BsPs3_XHD(wu^f#mk44RT97D*aGm$|gAlaIF@r&-idMgSx>T}u@L%%(xSgR?)D z(UX>1s>TYaXw4vcgOtkvT)yh>X$zu91RJ}4~uFRP|Ox@}@x~Gakr3{OZRwSk}832NxEw&H) zXiAo5OEQ`H5iX(+xd*AB7uBVe)VwL^R_+p@2IpBf4eIdXGwStUUpy;Gfu|jdICD~T z8!J4nO}7XFsP$O7B>NHZ_+njK839iA#^3{X-bQH9m!(dT=kM7tyJ|f3B&~R{0+WO) zcX|>mI7+8+0XRA{^H$Dm<^`rr!@t3}5bhYOTXpSNf0e-T=FCFA-sPXetZ)wbOPjbB zqJi-?#P&EAfrg@X8p(3JA7Rnw1X%bSp}p^cx_>-@ZFZS2 zig(Vlb~H`HX9F~TA?v3UGGELzD5Xm8WOsF`!5$&nLp`@H5YdjAY?7AqWQy@yWQ68oXO3fMC7@lWEtK zH1FB%!;6YWoFM&8N8&M13`ZyzyQSt=n8B64MQ5xlg>PBL%d4zk9y*}!2Gv2@nUvqP z@HHI@wYj;CLiU))sk8Z;92KPS0Gl z;m&lc7FKRKpHrk&WpYSv`$@?u^b zshPiLnINKyz2TdGt}XJ%8kc2JwcE}Y1D(7DCJoPwWuVxT3OFyKoGjNWX4=e>f!kZR zyPQ--^aO8cExb8EAJz?$Xy@a@jsSE>)$&&G;hNBFvFVHx!XsTa0*zg=Xg|aAh%J{V zc*B6VcaBp{O{ll6cFkfVo&z-M_Z&Srt6yB)DDxQ+`|Pdj$gb(;Dz!zsUc@0M@fG{g zwx&$x>9_$yRPC&f&O$hm+5S=Om;c-5ixU14Q}-zsp@tvg;f*$jyY`BVwQ&r5=j3~F zgJ}GYK+@KLONk$nEvTJiOVjUOIdB}3-0Y$O2B^pDEYjShW-~yIe}Z-njM6 zMa=>@evP#p{1w65G@6Q+32kt6^8W8CrtZsu6+1?4Ie0G|y;x4~FO(K@c>-B{^7A5_ zd6iQmKh)7GqO{U*AtOh$gI7t`Al&7+z>O^7y$sxXVOxe{0^IO-sTm?LZ3mR`b5Lym z6OOYad?3Pj|0LtWji>7i8{-Spp!6lyA_bk&M;7U%wSba5uSQ-u2^~;j2CndmM7lq` zlajqpV=B)|f0D7H=~GW~cwY*{^CXgf*(W3TeEdX;HykN;1Qf2H?Mr(0W9o{+bRTO{ z#i@9T%*Fu!uRKtd8zF_Nn4>qAvO{LdYl4 zjP-7E3_Qu7x6<@SD4O~G__)yHC#+!Ywgl5y6V|N(#T3;fYa}{O@IO%=F7`MQ-oISc zHPM+VrdLi+t(QK>z}ku)pTOD#u~_#EX^x@9o0r-&UEmIL54y}VsT$ms-Sd8_XOwz4 zF*8XCjenJ&bt{crI6qh}YWke{U?ltY$NSq9I*;wJ3n=i^wisS5RG_v^OTIU;mF600 z>3PGI1$32CUfi2&PpS;75o0OjFf=B~I* zX}HWE<0JUM{P7iHDqO_Jr+qTJ%&NlVtgL{Mn^sT}d;VKNFRT|+($M|!XrBu!Y`i16 zHnUtGhMj6YwlIh33Z$H}P?t(VEx+1D18xDF^HFe=Cr;w0!@@ zIxlFcbwU$~7_z^aA#4^DI}n;q8afX*V^HUNe#^pgFxq3P4E_}?9`>#Q`xP&CVq(tN3vJ8O8sCqDB5sXR`t>3Izh6PWqLY{C&f zVa-OQBS2Tif4b%t0C|;MnuTb>OjuiV5cr(uaW3D0)rt;Y_S$RJCU ztGl~uZhOnY6h?AQ7|l5Xm``vvLih}KbCa#0WH|pnw{V3oF74jEp*}h2mNTH`Yh6e@ zw@8MVdTaoIK!3mHb>GaSusejHtPW`<2=+2X3eE}|s_)_(gyA_Vjf5TSw_$<=+8p5c zo*~`CGL1Hd`nD$gq_v>&Us@O)LtNW#Lnjj#f1jXJYS36dOUoMKrMx77^(VEIX98Ak z*I0xFg%AF|#eVw3pc)0s%KY*o%!9Iye#@~MGR`dPC5yBMF3A(}i|p1TA$TbkyE?7c zLIQdB0uxeD`NgDaKLe#HthwaxLRXz&9Qwqv>iTR*`)WvuAEfp-9KDOa!_B!cpYiID z1_e3(AolEe+OgIt00dmF0!4o3>y0k0zyz2NV|2ul^?KF- zQc@*=b;qtOEA_yR3I2D*!F%7k!TCx$vh0-Ok;-Kz7x36P3naTKU zps80$-zBu(s{{!MxP2QBt=nO~zOcbo9Kv=pa9|h(y%PkzaL7fz=DU)^Tbkw*za6NH z#v*E4Y%<-verN|DjPVuho3jm-fpk^m#Li|^ErbIcikOR zywvk}Tn@>fUtua?jnxIkKyk2BJ8ANi_CEr+55m=2^s4WIfpkH>9@P^HzL5l9DoNp8 zkWQCt84rDL=s-`=OZMTo(F>$(Py*m?$&R8-A4KC%6@9T{v2AbMMy>UFvc#?Ig8f$d zcM)O2uNC}Zy!c>SgGUsfw&8W|LaxL@uOArz`@LV+wKB`EHZd<{OzLK>qrFbpc^qdzEyP9Djr4)hQZ z#6N|%5z($_;`i0p{g%0I%GgYLttIYi_jT%6)?3vhg%FJ=nOKTJ_Uebt8tR(*wVR(Qc}^0veobyP*p zS9zv+aHu6jxrPj`qqYLxg5`}1X;-#>7LJUnF9gfeMo3P}hvVd10or2D)dO?YSHG)Z zoz(K`n|Hon!LNU4tb2b@qAwfw;Z4496$0es6ui=Ki@S_Z5Eo8$7otcRSU>#wVxJ5E zcm;l;6Gw1Y3|MNc%b9q(VT|;F+@FKq69{_=gp8a!c}8Tg<*uSsRqRPu43W#*f#CF$ z{yL4M4r?*oW$xr1b%o2gifzK$ttw+YM3-N`Ah`AU`@etvBsXELL<7l!$(V0gjw+s~ zz>m2K=)^-r5%T+#z{Lgt>)WO{1Wc>E4(tCI*QeYSXBEar=_dpZDOglJ&eMyXWQK3DX*87ksZ z4hA{_yF-~X3Qa%gigLE~AH-Pc&k?e|j7k#d9SP(B^f>t}u>p2NUN*VfI_(mZY^Ic| z{&GRAc~HG`vc45BtuCUz($=aks@*ToQ<7pcy$mD0VhWrv$@-GOr0nZ<*n5`arXt=H zVhzB@P5fQ;PN-ul09hwbD}?ddLKmDV=gjk)_gr;BCa@~@;!|3ijDy}h#BigK%!=>? zKd<`?<)V^@5pVL%4W8S>O2tu?*uDZ7UCr8ai@;*z>8YrpCXq8gXq7`MZVYc&GtZj? zVn2PgyA5$<`TA);YT9e0JR<#-g`THXKsRcI+n&1{HugWXI=7Az9-j?~Lc*F?B6vrJ zSDb!I_C9dgs`Q;IPi@n&7c(kb4WsKS#U)US3*;-xcce^F525>njkTuCs$fAVW`*g8 znfqn;UuiP{Y@@y0Uk+gJJ%cKIzB#7NcK)*SSDVcVuXOI08-CR}7GuZ@-DTDJ(t5`; z4Nbrx4F2#W4~DU3r$x_bEMapr6s9lMD=HFON1iJkJQzTcy6sp+O<~Eb+v-yY062V@ zs9O>xUYvR`3OKj2}k}qcPIeu{f;1W^-aUYa^ppE>P{U`g| zhBA;teP}bKWh)`fhm%=Yc67X9#LHBO`*uptjgKhT_EM*r8~jygyvMNsYCSap%pcor z9StQgv7E6y*&)LuI*xf{g2JOGepRzJ#J;LeNVKClC##*n;R&yGnO9}urQQV70C%(< zGuNyN%Dz`eJhd7q=TyAL)2=+<;>H5sB9YYNdy)i>1t0l@Dl=y7B6u@A-r`ju43R0S z*nlbzAgnxST|a}l2{Y0@9x}w_+93AW6)6*^bd+M8TA!_?MmH^QAw_F%qxu544|h2o zO*jm;2k)zGY=`~!iYVy(CAVV$uHh#F8HDYah~4q8E^=P>ubm+A?@RiN1f_Ph@Sc+S z@UmZd?Ur~mLC29YoT~{l;Om>m$!0U5FlTLwd07Qjdr=GmUJTD{zmisqm?e;S<3vEA z*0(oHv@4xk%#15`2w5GeBK#tg+o*nQVvg*XNzYr-IiRDP8gm3pKFY{v;>R0=K3yep z8C0~8n4gBMj58d4HDs{u@}Y-U+T1@}0jzAs)nu$qPJqpF1c`--zi_UqscfUhj0#>x9g99`JFF5b$Pvl_t zvHcDvyu=pMY@KGQ@)-Al*{nMhr@rjt6KBHQBNrk{Nn-VRF(aIwHusj%vGBoM{N5oT z!bIX@excR-hG{O=gU7=|bIMm-<|TkYO8{>>mtZYXH|+!0d74v)u;LxhOjEGVH|_6`WS!&D{SbU@MA1&g z%VFyMHs*)27G#aa1*t2Ks|b?QOp63-ubUMUSIt-^4lR6PL8TTBQhAKN`(`@RlD{12 zYv)TOqPH{|>rB}v$a;6)_1ebdnb^lf^2N+6?{aYSKD$!05Npz5bsOZIjWF|W*QX)N z2#P1|wf7?e5~}8=-)`^ZnJ9QUU#*vsLA`NCo5beB;0J7_94Vj5eX#y-G$CIh?e{?0#rt0BC6A#gy{Y z2?alvPhS3DRLS%rkwsHlzVpo{uUtrbQR|wR(L@h(@gJs#R#rePW~%g9FNsluoz1xi zk&e%(hOsw7v@mO_mgkbJ1YJptEgHmU19*?Wj4Zm!+)Nt;s82C06DTagh2n1w5zay= zvAMpnPWU38KE-;QzPSD~(^q#reUhb-lg7V!!PdT$>*z^Z?2))f-#4v6OMR6^5#X=% zf}hS!^b$V4-i>j$dSeKld{*>LF=F!H&LNBx>ZX!|M?Ii}q0e(p+DjL`TRX2V)5{K& zE`PRaTzxE@eHRQa0dn1gbujNNpxF^~_qVRFb&GFbH`5;#Xqts$w`E|JSHbOf-BXtV zHq@wHuNyBn{?vqtT+euRMVpj1uRDH%V8uRZnvkaQULB@eo2C zPK<{uxq^O0z=U=6OmR}Cj6F`ra8cH2ubz#ZaK|7OQR`BM1#QfWkIk+B3JNQ*GMYaI zXzArKV=b@%oltp(tmsht?Rg5Z*Dw629DGMGGT=Q2=X)u z$Y&Xw8w{gq1E}OVVE}x6+fxI~7}z!X9#Z*vJDee{cW{j2+Fe61zHzB*{m5P5=McfNlq$Ni3U1zP9v-cs8l-G>ZM5)@n z=WR;`2}ZiVgsLEjnxd^r5)vp48%ZUdwy%d>_AcSC{OI|NJjgtCx$J4fdD*{FX*x|s zo)*gDZEg=_g6ShUOSQK(b2FQ*Zz8ZSL5AQE;^Z64>RI(>^F)*8K1e)^{_#-;#jH03 zl`&+*@DcFJw{J@IE>yDGk#KJ}L&QWUmj_d>opyJUHc{�e%nZC1!^pP?`Fe-tm;C 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 G0{{TFWc059 literal 0 HcmV?d00001 diff --git a/docs/static.files/FiraSans-MediumItalic-ccf7e434.woff2 b/docs/static.files/FiraSans-MediumItalic-ccf7e434.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2d08f9f7d45fda39315519c4d6ffce5b84454d70 GIT binary patch literal 140588 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�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

%kIaTch%S18n7|ogN{Ilm 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⪻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

(_VuT5-N!zd8q@AJ44ro;*^XcsH^-RBAu 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 literal 0 HcmV?d00001 diff --git a/docs/static.files/SourceSerif4-Semibold-457a13ac.ttf.woff2 b/docs/static.files/SourceSerif4-Semibold-457a13ac.ttf.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..dd55f4e95ec9c29fb566d8617104afca31f0eeef GIT binary patch literal 80732 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 literal 0 HcmV?d00001 diff --git a/docs/static.files/main-5f194d8c.js b/docs/static.files/main-5f194d8c.js deleted file mode 100644 index 3d672cb..0000000 --- a/docs/static.files/main-5f194d8c.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden");const toggle=document.getElementById("toggle-all-docs");if(toggle){toggle.setAttribute("disabled","disabled")}}function showMain(){const main=document.getElementById(MAIN_ID);removeClass(main,"hidden");const mainHeading=main.querySelector(".main-heading");if(mainHeading&&searchState.rustdocToolbar){if(searchState.rustdocToolbar.parentElement){searchState.rustdocToolbar.parentElement.removeChild(searchState.rustdocToolbar)}mainHeading.appendChild(searchState.rustdocToolbar)}const toggle=document.getElementById("toggle-all-docs");if(toggle){toggle.removeAttribute("disabled")}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileTopbar=document.querySelector(".mobile-topbar");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileTopbar){const mobileTitle=document.createElement("h2");mobileTitle.className="location";if(hasClass(document.querySelector(".rustdoc"),"crate")){mobileTitle.innerHTML=`Crate ${window.currentCrate}`}else if(locationTitle){mobileTitle.innerHTML=locationTitle.innerHTML}mobileTopbar.appendChild(mobileTitle)}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden");const mainHeading=elemToDisplay.querySelector(".main-heading");if(mainHeading&&searchState.rustdocToolbar){if(searchState.rustdocToolbar.parentElement){searchState.rustdocToolbar.parentElement.removeChild(searchState.rustdocToolbar)}mainHeading.appendChild(searchState.rustdocToolbar)}}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url,errorCallback){const script=document.createElement("script");script.src=url;if(errorCallback!==undefined){script.onerror=errorCallback}document.head.append(script)}if(getSettingsButton()){getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadScript(getVar("static-root-path")+getVar("settings-js"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)}}window.searchState={rustdocToolbar:document.querySelector("rustdoc-toolbar"),loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=").map(x=>x.replace(/\+/g," "));params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function sendSearchForm(){document.getElementsByClassName("search-form")[0].submit()}function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"),sendSearchForm);loadScript(resourcePath("search-index",".js"),sendSearchForm)}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search)},descShards:new Map(),loadDesc:async function({descShard,descIndex}){if(descShard.promise===null){descShard.promise=new Promise((resolve,reject)=>{descShard.resolve=resolve;const ds=descShard;const fname=`${ds.crate}-desc-${ds.shard}-`;const url=resourcePath(`search.desc/${descShard.crate}/${fname}`,".js",);loadScript(url,reject)})}const list=await descShard.promise;return list[descIndex]},loadedDescShard:function(crate,shard,data){this.descShards.get(crate)[shard].resolve(data.split("\n"))},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}if(savedHash.startsWith("impl-")){const splitAt=savedHash.indexOf("/");if(splitAt!==-1){const implId=savedHash.slice(0,splitAt);const assocId=savedHash.slice(splitAt+1);const implElems=document.querySelectorAll(`details > summary > section[id^="${implId}"]`,);onEachLazy(implElems,implElem=>{const numbered=/^(.+?)-([0-9]+)$/.exec(implElem.id);if(implElem.id!==implId&&(!numbered||numbered[1]!==implId)){return false}return onEachLazy(implElem.parentElement.parentElement.querySelectorAll(`[id^="${assocId}"]`),item=>{const numbered=/^(.+?)-([0-9]+)$/.exec(item.id);if(item.id===assocId||(numbered&&numbered[1]===assocId)){openParentDetails(item);item.scrollIntoView();setTimeout(()=>{window.location.replace("#"+item.id)},0);return true}},)})}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":case"/":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementById("rustdoc-modnav");function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const modpath=hasClass(document.querySelector(".rustdoc"),"mod")?"../":"";const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=`${modpath}${name}/index.html`}else{path=`${modpath}${shortty}.${name}.html`}let current_page=document.location.href.toString();if(current_page.endsWith("/")){current_page+="index.html"}const link=document.createElement("a");link.href=path;link.textContent=name;const li=document.createElement("li");if(link.href===current_page){li.classList.add("current")}li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Aliases");block("union","unions","Unions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("attr","attributes","Attribute Macros");block("derive","derives","Derive Macros");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","),);for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}window.register_type_impls=imp=>{if(!imp||!imp[window.currentCrate]){return}window.pending_type_impls=null;const idMap=new Map();let implementations=document.getElementById("implementations-list");let trait_implementations=document.getElementById("trait-implementations-list");let trait_implementations_header=document.getElementById("trait-implementations");const script=document.querySelector("script[data-self-path]");const selfPath=script?script.getAttribute("data-self-path"):null;const mainContent=document.querySelector("#main-content");const sidebarSection=document.querySelector(".sidebar section");let methods=document.querySelector(".sidebar .block.method");let associatedTypes=document.querySelector(".sidebar .block.associatedtype");let associatedConstants=document.querySelector(".sidebar .block.associatedconstant");let sidebarTraitList=document.querySelector(".sidebar .block.trait-implementation");for(const impList of imp[window.currentCrate]){const types=impList.slice(2);const text=impList[0];const isTrait=impList[1]!==0;const traitName=impList[1];if(types.indexOf(selfPath)===-1){continue}let outputList=isTrait?trait_implementations:implementations;if(outputList===null){const outputListName=isTrait?"Trait Implementations":"Implementations";const outputListId=isTrait?"trait-implementations-list":"implementations-list";const outputListHeaderId=isTrait?"trait-implementations":"implementations";const outputListHeader=document.createElement("h2");outputListHeader.id=outputListHeaderId;outputListHeader.innerText=outputListName;outputList=document.createElement("div");outputList.id=outputListId;if(isTrait){const link=document.createElement("a");link.href=`#${outputListHeaderId}`;link.innerText="Trait Implementations";const h=document.createElement("h3");h.appendChild(link);trait_implementations=outputList;trait_implementations_header=outputListHeader;sidebarSection.appendChild(h);sidebarTraitList=document.createElement("ul");sidebarTraitList.className="block trait-implementation";sidebarSection.appendChild(sidebarTraitList);mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}else{implementations=outputList;if(trait_implementations){mainContent.insertBefore(outputListHeader,trait_implementations_header);mainContent.insertBefore(outputList,trait_implementations_header)}else{const mainContent=document.querySelector("#main-content");mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}}}const template=document.createElement("template");template.innerHTML=text;onEachLazy(template.content.querySelectorAll("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});onEachLazy(template.content.querySelectorAll("[id]"),el=>{let i=0;if(idMap.has(el.id)){i=idMap.get(el.id)}else if(document.getElementById(el.id)){i=1;while(document.getElementById(`${el.id}-${2 * i}`)){i=2*i}while(document.getElementById(`${el.id}-${i}`)){i+=1}}if(i!==0){const oldHref=`#${el.id}`;const newHref=`#${el.id}-${i}`;el.id=`${el.id}-${i}`;onEachLazy(template.content.querySelectorAll("a[href]"),link=>{if(link.getAttribute("href")===oldHref){link.href=newHref}})}idMap.set(el.id,i+1)});const templateAssocItems=template.content.querySelectorAll("section.tymethod, "+"section.method, section.associatedtype, section.associatedconstant");if(isTrait){const li=document.createElement("li");const a=document.createElement("a");a.href=`#${template.content.querySelector(".impl").id}`;a.textContent=traitName;li.appendChild(a);sidebarTraitList.append(li)}else{onEachLazy(templateAssocItems,item=>{let block=hasClass(item,"associatedtype")?associatedTypes:(hasClass(item,"associatedconstant")?associatedConstants:(methods));if(!block){const blockTitle=hasClass(item,"associatedtype")?"Associated Types":(hasClass(item,"associatedconstant")?"Associated Constants":("Methods"));const blockClass=hasClass(item,"associatedtype")?"associatedtype":(hasClass(item,"associatedconstant")?"associatedconstant":("method"));const blockHeader=document.createElement("h3");const blockLink=document.createElement("a");blockLink.href="#implementations";blockLink.innerText=blockTitle;blockHeader.appendChild(blockLink);block=document.createElement("ul");block.className=`block ${blockClass}`;const insertionReference=methods||sidebarTraitList;if(insertionReference){const insertionReferenceH=insertionReference.previousElementSibling;sidebarSection.insertBefore(blockHeader,insertionReferenceH);sidebarSection.insertBefore(block,insertionReferenceH)}else{sidebarSection.appendChild(blockHeader);sidebarSection.appendChild(block)}if(hasClass(item,"associatedtype")){associatedTypes=block}else if(hasClass(item,"associatedconstant")){associatedConstants=block}else{methods=block}}const li=document.createElement("li");const a=document.createElement("a");a.innerText=item.id.split("-")[0].split(".")[1];a.href=`#${item.id}`;li.appendChild(a);block.appendChild(li)})}outputList.appendChild(template.content)}for(const list of[methods,associatedTypes,associatedConstants,sidebarTraitList]){if(!list){continue}const newChildren=Array.prototype.slice.call(list.children);newChildren.sort((a,b)=>{const aI=a.innerText;const bI=b.innerText;return aIbI?1:0});list.replaceChildren(...newChildren)}};if(window.pending_type_impls){window.register_type_impls(window.pending_type_impls)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementById("rustdoc-modnav");if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";link.textContent=crate;const li=document.createElement("li");if(window.rootPath!=="./"&&crate===window.currentCrate){li.className="current"}li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.children[0].innerText="Summary"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.children[0].innerText="Show all"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{if(document.querySelector(".rustdoc.src")){return}onEachLazy(document.querySelectorAll(":not(.scraped-example) > .example-wrap > pre:not(.example-line-numbers)",),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.querySelectorAll(".example-wrap > .example-line-numbers"),x=>{x.parentNode.removeChild(x)})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";document.body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px",)}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!e.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.contains(event.relatedTarget)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(event.relatedTarget)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}document.body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=()=>{e.TOOLTIP_FORCE_VISIBLE=e.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!e.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(e);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointermove=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){if(!getHelpButton().contains(document.activeElement)&&!getHelpButton().contains(event.relatedTarget)&&!getSettingsButton().contains(document.activeElement)&&!getSettingsButton().contains(event.relatedTarget)){window.hidePopoverMenus()}}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ -the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S / /","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
"+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ - restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ - enum, trait, type, macro, \ - and const.","Search functions by type signature (e.g., vec -> usize or \ - -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"","Look for functions that accept or return \ - slices and \ - arrays by writing \ - square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=switchFocus=>{hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=()=>{onEachLazy(document.querySelectorAll("rustdoc-toolbar .popover"),elem=>{elem.style.display="none"});const button=getHelpButton();if(button){removeClass(button,"help-open")}};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){const button=getHelpButton();addClass(button,"help-open");button.querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}const helpLink=document.querySelector(`#${HELP_BUTTON_ID} > a`);if(isHelpPage){buildHelpMenu()}else if(helpLink){helpLink.addEventListener("click",event=>{if(!helpLink.contains(helpLink)||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){const SIDEBAR_MIN=100;const SIDEBAR_MAX=500;const RUSTDOC_MOBILE_BREAKPOINT=700;const BODY_MIN=400;const SIDEBAR_VANISH_THRESHOLD=SIDEBAR_MIN/2;const sidebarButton=document.getElementById("sidebar-button");if(sidebarButton){sidebarButton.addEventListener("click",e=>{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false");if(document.querySelector(".rustdoc.src")){window.rustdocToggleSrcSidebar()}e.preventDefault()})}let currentPointerId=null;let desiredSidebarSize=null;let pendingSidebarResizingFrame=false;const resizer=document.querySelector(".sidebar-resizer");const sidebar=document.querySelector(".sidebar");if(!resizer||!sidebar){return}const isSrcPage=hasClass(document.body,"src");function hideSidebar(){if(isSrcPage){window.rustdocCloseSourceSidebar();updateLocalStorage("src-sidebar-width",null);document.documentElement.style.removeProperty("--src-sidebar-width");sidebar.style.removeProperty("--src-sidebar-width");resizer.style.removeProperty("--src-sidebar-width")}else{addClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","true");updateLocalStorage("desktop-sidebar-width",null);document.documentElement.style.removeProperty("--desktop-sidebar-width");sidebar.style.removeProperty("--desktop-sidebar-width");resizer.style.removeProperty("--desktop-sidebar-width")}}function showSidebar(){if(isSrcPage){window.rustdocShowSourceSidebar()}else{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false")}}function changeSidebarSize(size){if(isSrcPage){updateLocalStorage("src-sidebar-width",size);sidebar.style.setProperty("--src-sidebar-width",size+"px");resizer.style.setProperty("--src-sidebar-width",size+"px")}else{updateLocalStorage("desktop-sidebar-width",size);sidebar.style.setProperty("--desktop-sidebar-width",size+"px");resizer.style.setProperty("--desktop-sidebar-width",size+"px")}}function isSidebarHidden(){return isSrcPage?!hasClass(document.documentElement,"src-sidebar-expanded"):hasClass(document.documentElement,"hide-sidebar")}function resize(e){if(currentPointerId===null||currentPointerId!==e.pointerId){return}e.preventDefault();const pos=e.clientX-3;if(pos=SIDEBAR_MIN){if(isSidebarHidden()){showSidebar()}const constrainedPos=Math.min(pos,window.innerWidth-BODY_MIN,SIDEBAR_MAX);changeSidebarSize(constrainedPos);desiredSidebarSize=constrainedPos;if(pendingSidebarResizingFrame!==false){clearTimeout(pendingSidebarResizingFrame)}pendingSidebarResizingFrame=setTimeout(()=>{if(currentPointerId===null||pendingSidebarResizingFrame===false){return}pendingSidebarResizingFrame=false;document.documentElement.style.setProperty("--resizing-sidebar-width",desiredSidebarSize+"px",)},100)}}window.addEventListener("resize",()=>{if(window.innerWidth=(window.innerWidth-BODY_MIN)){changeSidebarSize(window.innerWidth-BODY_MIN)}else if(desiredSidebarSize!==null&&desiredSidebarSize>SIDEBAR_MIN){changeSidebarSize(desiredSidebarSize)}});function stopResize(e){if(currentPointerId===null){return}if(e){e.preventDefault()}desiredSidebarSize=sidebar.getBoundingClientRect().width;removeClass(resizer,"active");window.removeEventListener("pointermove",resize,false);window.removeEventListener("pointerup",stopResize,false);removeClass(document.documentElement,"sidebar-resizing");document.documentElement.style.removeProperty("--resizing-sidebar-width");if(resizer.releasePointerCapture){resizer.releasePointerCapture(currentPointerId);currentPointerId=null}}function initResize(e){if(currentPointerId!==null||e.altKey||e.ctrlKey||e.metaKey||e.button!==0){return}if(resizer.setPointerCapture){resizer.setPointerCapture(e.pointerId);if(!resizer.hasPointerCapture(e.pointerId)){resizer.releasePointerCapture(e.pointerId);return}currentPointerId=e.pointerId}window.hideAllModals(false);e.preventDefault();window.addEventListener("pointermove",resize,false);window.addEventListener("pointercancel",stopResize,false);window.addEventListener("pointerup",stopResize,false);addClass(resizer,"active");addClass(document.documentElement,"sidebar-resizing");const pos=e.clientX-sidebar.offsetLeft-3;document.documentElement.style.setProperty("--resizing-sidebar-width",pos+"px");desiredSidebarSize=null}resizer.addEventListener("pointerdown",initResize,false)}());(function(){function copyContentToClipboard(content){const el=document.createElement("textarea");el.value=content;el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el)}function copyButtonAnimation(button){button.classList.add("clicked");if(button.reset_button_timeout!==undefined){window.clearTimeout(button.reset_button_timeout)}button.reset_button_timeout=window.setTimeout(()=>{button.reset_button_timeout=undefined;button.classList.remove("clicked")},1000)}const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const title=document.querySelector("title").textContent.replace(" - Rust","");const[item,module]=title.split(" in ");const path=[item];if(module!==undefined){path.unshift(module)}copyContentToClipboard(path.join("::"));copyButtonAnimation(but)};function copyCode(codeElem){if(!codeElem){return}copyContentToClipboard(codeElem.textContent)}function getExampleWrap(event){let elem=event.target;while(!hasClass(elem,"example-wrap")){if(elem===document.body||elem.tagName==="A"||elem.tagName==="BUTTON"||hasClass(elem,"docblock")){return null}elem=elem.parentElement}return elem}function addCopyButton(event){const elem=getExampleWrap(event);if(elem===null){return}elem.removeEventListener("mouseover",addCopyButton);const parent=document.createElement("div");parent.className="button-holder";const runButton=elem.querySelector(".test-arrow");if(runButton!==null){parent.appendChild(runButton)}elem.appendChild(parent);const copyButton=document.createElement("button");copyButton.className="copy-button";copyButton.title="Copy code to clipboard";copyButton.addEventListener("click",()=>{copyCode(elem.querySelector("pre > code"));copyButtonAnimation(copyButton)});parent.appendChild(copyButton);if(!elem.parentElement.classList.contains("scraped-example")){return}const scrapedWrapped=elem.parentElement;window.updateScrapedExample(scrapedWrapped,parent)}function showHideCodeExampleButtons(event){const elem=getExampleWrap(event);if(elem===null){return}let buttons=elem.querySelector(".button-holder");if(buttons===null){addCopyButton(event);buttons=elem.querySelector(".button-holder");if(buttons===null){return}}buttons.classList.toggle("keep-visible")}onEachLazy(document.querySelectorAll(".docblock .example-wrap"),elem=>{elem.addEventListener("mouseover",addCopyButton);elem.addEventListener("click",showHideCodeExampleButtons)})}()) \ No newline at end of file diff --git a/docs/static.files/main-fd3af306.js b/docs/static.files/main-fd3af306.js new file mode 100644 index 0000000..902a545 --- /dev/null +++ b/docs/static.files/main-fd3af306.js @@ -0,0 +1,11 @@ +"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden");const toggle=document.getElementById("toggle-all-docs");if(toggle){toggle.setAttribute("disabled","disabled")}}function showMain(){const main=document.getElementById(MAIN_ID);if(!main){return}removeClass(main,"hidden");const mainHeading=main.querySelector(".main-heading");if(mainHeading&&window.searchState.rustdocToolbar){if(window.searchState.rustdocToolbar.parentElement){window.searchState.rustdocToolbar.parentElement.removeChild(window.searchState.rustdocToolbar,)}mainHeading.appendChild(window.searchState.rustdocToolbar)}const toggle=document.getElementById("toggle-all-docs");if(toggle){toggle.removeAttribute("disabled")}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileTopbar=document.querySelector(".mobile-topbar");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileTopbar){const mobileTitle=document.createElement("h2");mobileTitle.className="location";if(hasClass(document.querySelector(".rustdoc"),"crate")){mobileTitle.innerHTML=`Crate ${window.currentCrate}`}else if(locationTitle){mobileTitle.innerHTML=locationTitle.innerHTML}mobileTopbar.appendChild(mobileTitle)}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden");const mainHeading=elemToDisplay.querySelector(".main-heading");if(mainHeading&&window.searchState.rustdocToolbar){if(window.searchState.rustdocToolbar.parentElement){window.searchState.rustdocToolbar.parentElement.removeChild(window.searchState.rustdocToolbar,)}mainHeading.appendChild(window.searchState.rustdocToolbar)}}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url,errorCallback){const script=document.createElement("script");script.src=url;if(errorCallback!==undefined){script.onerror=errorCallback}document.head.append(script)}const settingsButton=getSettingsButton();if(settingsButton){settingsButton.onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadScript(getVar("static-root-path")+getVar("settings-js"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)}}window.searchState={rustdocToolbar:document.querySelector("rustdoc-toolbar"),loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(window.searchState.timeout!==null){clearTimeout(window.searchState.timeout);window.searchState.timeout=null}},isDisplayed:()=>{const outputElement=window.searchState.outputElement();return!!outputElement&&!!outputElement.parentElement&&outputElement.parentElement.id===ALTERNATIVE_DISPLAY_ID},focus:()=>{window.searchState.input&&window.searchState.input.focus()},defocus:()=>{window.searchState.input&&window.searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=window.searchState.outputElement()}switchDisplayedElement(search);document.title=window.searchState.title},removeQueryParameters:()=>{document.title=window.searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);window.searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=").map(x=>x.replace(/\+/g," "));params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=window.searchState.input;if(!search_input){return}let searchLoaded=false;function sendSearchForm(){document.getElementsByClassName("search-form")[0].submit()}function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"),sendSearchForm);loadScript(resourcePath("search-index",".js"),sendSearchForm)}}search_input.addEventListener("focus",()=>{window.searchState.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=window.searchState.getQueryStringParams();if(params.search!==undefined){window.searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=window.searchState.outputElement();if(!search){return}search.innerHTML="

"+window.searchState.loadingText+"

";window.searchState.showResults(search)},descShards:new Map(),loadDesc:async function({descShard,descIndex}){if(descShard.promise===null){descShard.promise=new Promise((resolve,reject)=>{descShard.resolve=resolve;const ds=descShard;const fname=`${ds.crate}-desc-${ds.shard}-`;const url=resourcePath(`search.desc/${descShard.crate}/${fname}`,".js",);loadScript(url,reject)})}const list=await descShard.promise;return list[descIndex]},loadedDescShard:function(crate,shard,data){this.descShards.get(crate)[shard].resolve(data.split("\n"))},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&window.searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}if(savedHash.startsWith("impl-")){const splitAt=savedHash.indexOf("/");if(splitAt!==-1){const implId=savedHash.slice(0,splitAt);const assocId=savedHash.slice(splitAt+1);const implElems=document.querySelectorAll(`details > summary > section[id^="${implId}"]`,);onEachLazy(implElems,implElem=>{const numbered=/^(.+?)-([0-9]+)$/.exec(implElem.id);if(implElem.id!==implId&&(!numbered||numbered[1]!==implId)){return false}return onEachLazy(implElem.parentElement.parentElement.querySelectorAll(`[id^="${assocId}"]`),item=>{const numbered=/^(.+?)-([0-9]+)$/.exec(item.id);if(item.id===assocId||(numbered&&numbered[1]===assocId)){openParentDetails(item);item.scrollIntoView();setTimeout(()=>{window.location.replace("#"+item.id)},0);return true}},)})}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentElement}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){window.searchState.clearInputTimeout();window.searchState.hideResults();ev.preventDefault();window.searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement&&document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":case"/":ev.preventDefault();window.searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementById("rustdoc-modnav");function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const modpath=hasClass(document.querySelector(".rustdoc"),"mod")?"../":"";const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=`${modpath}${name}/index.html`}else{path=`${modpath}${shortty}.${name}.html`}let current_page=document.location.href.toString();if(current_page.endsWith("/")){current_page+="index.html"}const link=document.createElement("a");link.href=path;link.textContent=name;const li=document.createElement("li");if(link.href===current_page){li.classList.add("current")}li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Aliases");block("union","unions","Unions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("attr","attributes","Attribute Macros");block("derive","derives","Derive Macros");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","),);for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}window.register_type_impls=imp=>{if(!imp||!imp[window.currentCrate]){return}window.pending_type_impls=undefined;const idMap=new Map();let implementations=document.getElementById("implementations-list");let trait_implementations=document.getElementById("trait-implementations-list");let trait_implementations_header=document.getElementById("trait-implementations");const script=document.querySelector("script[data-self-path]");const selfPath=script?script.getAttribute("data-self-path"):null;const mainContent=document.querySelector("#main-content");const sidebarSection=document.querySelector(".sidebar section");let methods=document.querySelector(".sidebar .block.method");let associatedTypes=document.querySelector(".sidebar .block.associatedtype");let associatedConstants=document.querySelector(".sidebar .block.associatedconstant");let sidebarTraitList=document.querySelector(".sidebar .block.trait-implementation");for(const impList of imp[window.currentCrate]){const types=impList.slice(2);const text=impList[0];const isTrait=impList[1]!==0;const traitName=impList[1];if(types.indexOf(selfPath)===-1){continue}let outputList=isTrait?trait_implementations:implementations;if(outputList===null){const outputListName=isTrait?"Trait Implementations":"Implementations";const outputListId=isTrait?"trait-implementations-list":"implementations-list";const outputListHeaderId=isTrait?"trait-implementations":"implementations";const outputListHeader=document.createElement("h2");outputListHeader.id=outputListHeaderId;outputListHeader.innerText=outputListName;outputList=document.createElement("div");outputList.id=outputListId;if(isTrait){const link=document.createElement("a");link.href=`#${outputListHeaderId}`;link.innerText="Trait Implementations";const h=document.createElement("h3");h.appendChild(link);trait_implementations=outputList;trait_implementations_header=outputListHeader;sidebarSection.appendChild(h);sidebarTraitList=document.createElement("ul");sidebarTraitList.className="block trait-implementation";sidebarSection.appendChild(sidebarTraitList);mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}else{implementations=outputList;if(trait_implementations){mainContent.insertBefore(outputListHeader,trait_implementations_header);mainContent.insertBefore(outputList,trait_implementations_header)}else{const mainContent=document.querySelector("#main-content");mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}}}const template=document.createElement("template");template.innerHTML=text;onEachLazy(template.content.querySelectorAll("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});onEachLazy(template.content.querySelectorAll("[id]"),el=>{let i=0;if(idMap.has(el.id)){i=idMap.get(el.id)}else if(document.getElementById(el.id)){i=1;while(document.getElementById(`${el.id}-${2 * i}`)){i=2*i}while(document.getElementById(`${el.id}-${i}`)){i+=1}}if(i!==0){const oldHref=`#${el.id}`;const newHref=`#${el.id}-${i}`;el.id=`${el.id}-${i}`;onEachLazy(template.content.querySelectorAll("a[href]"),link=>{if(link.getAttribute("href")===oldHref){link.href=newHref}})}idMap.set(el.id,i+1)});const templateAssocItems=template.content.querySelectorAll("section.tymethod, "+"section.method, section.associatedtype, section.associatedconstant");if(isTrait){const li=document.createElement("li");const a=document.createElement("a");a.href=`#${template.content.querySelector(".impl").id}`;a.textContent=traitName;li.appendChild(a);sidebarTraitList.append(li)}else{onEachLazy(templateAssocItems,item=>{let block=hasClass(item,"associatedtype")?associatedTypes:(hasClass(item,"associatedconstant")?associatedConstants:(methods));if(!block){const blockTitle=hasClass(item,"associatedtype")?"Associated Types":(hasClass(item,"associatedconstant")?"Associated Constants":("Methods"));const blockClass=hasClass(item,"associatedtype")?"associatedtype":(hasClass(item,"associatedconstant")?"associatedconstant":("method"));const blockHeader=document.createElement("h3");const blockLink=document.createElement("a");blockLink.href="#implementations";blockLink.innerText=blockTitle;blockHeader.appendChild(blockLink);block=document.createElement("ul");block.className=`block ${blockClass}`;const insertionReference=methods||sidebarTraitList;if(insertionReference){const insertionReferenceH=insertionReference.previousElementSibling;sidebarSection.insertBefore(blockHeader,insertionReferenceH);sidebarSection.insertBefore(block,insertionReferenceH)}else{sidebarSection.appendChild(blockHeader);sidebarSection.appendChild(block)}if(hasClass(item,"associatedtype")){associatedTypes=block}else if(hasClass(item,"associatedconstant")){associatedConstants=block}else{methods=block}}const li=document.createElement("li");const a=document.createElement("a");a.innerText=item.id.split("-")[0].split(".")[1];a.href=`#${item.id}`;li.appendChild(a);block.appendChild(li)})}outputList.appendChild(template.content)}for(const list of[methods,associatedTypes,associatedConstants,sidebarTraitList]){if(!list){continue}const newChildren=Array.prototype.slice.call(list.children);newChildren.sort((a,b)=>{const aI=a.innerText;const bI=b.innerText;return aIbI?1:0});list.replaceChildren(...newChildren)}};if(window.pending_type_impls){window.register_type_impls(window.pending_type_impls)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementById("rustdoc-modnav");if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";link.textContent=crate;const li=document.createElement("li");if(window.rootPath!=="./"&&crate===window.currentCrate){li.className="current"}li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.children[0].innerText="Summary"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.children[0].innerText="Show all"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{function generateLine(nb){return`${nb}`}onEachLazy(document.querySelectorAll(".rustdoc:not(.src) :not(.scraped-example) > .example-wrap > pre > code",),code=>{if(hasClass(code.parentElement.parentElement,"hide-lines")){removeClass(code.parentElement.parentElement,"hide-lines");return}const lines=code.innerHTML.split("\n");const digits=(lines.length+"").length;code.innerHTML=lines.map((line,index)=>generateLine(index+1)+line).join("\n");addClass(code.parentElement.parentElement,`digits-${digits}`)})};window.rustdoc_remove_line_numbers_from_examples=()=>{onEachLazy(document.querySelectorAll(".rustdoc:not(.src) :not(.scraped-example) > .example-wrap"),x=>addClass(x,"hide-lines"),)};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(!e.target.matches("summary, a, a *")){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else{const ttl=e.getAttribute("title");if(ttl!==null){e.setAttribute("data-title",ttl);e.removeAttribute("title")}const dttl=e.getAttribute("data-title");if(dttl!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(dttl));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";document.body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px",)}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=ev=>{if(ev.pointerType!=="mouse"||!(ev.relatedTarget instanceof HTMLElement)){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!e.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.contains(event.relatedTarget)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(event.relatedTarget)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}document.body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=()=>{e.TOOLTIP_FORCE_VISIBLE=e.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!e.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(e);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointermove=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){if(!getHelpButton().contains(document.activeElement)&&!getHelpButton().contains(event.relatedTarget)&&!getSettingsButton().contains(document.activeElement)&&!getSettingsButton().contains(event.relatedTarget)){window.hidePopoverMenus()}}function buildHelpMenu(){const book_info=document.createElement("span");const drloChannel=`https://doc.rust-lang.org/${getVar("channel")}`;book_info.className="top";book_info.innerHTML=`You can find more information in \ +the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S / /","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
"+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const infos=[`For a full list of all search features, take a look \ + here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ + restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ + enum, trait, type, macro, \ + and const.","Search functions by type signature (e.g., vec -> usize or \ + -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ + your request: \"string\"",`Look for functions that accept or return \ + slices and \ + arrays by writing square \ + brackets (e.g., -> [u8] or [] -> Option)`,"Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=switchFocus=>{hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=()=>{onEachLazy(document.querySelectorAll("rustdoc-toolbar .popover"),elem=>{elem.style.display="none"});const button=getHelpButton();if(button){removeClass(button,"help-open")}};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){const button=getHelpButton();addClass(button,"help-open");button.querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}const helpLink=document.querySelector(`#${HELP_BUTTON_ID} > a`);if(isHelpPage){buildHelpMenu()}else if(helpLink){helpLink.addEventListener("click",event=>{if(!helpLink.contains(helpLink)||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);window.searchState.setup()}());(function(){const SIDEBAR_MIN=100;const SIDEBAR_MAX=500;const RUSTDOC_MOBILE_BREAKPOINT=700;const BODY_MIN=400;const SIDEBAR_VANISH_THRESHOLD=SIDEBAR_MIN/2;const sidebarButton=document.getElementById("sidebar-button");if(sidebarButton){sidebarButton.addEventListener("click",e=>{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false");if(document.querySelector(".rustdoc.src")){window.rustdocToggleSrcSidebar()}e.preventDefault()})}let currentPointerId=null;let desiredSidebarSize=null;let pendingSidebarResizingFrame=false;const resizer=document.querySelector(".sidebar-resizer");const sidebar=document.querySelector(".sidebar");if(!resizer||!sidebar){return}const isSrcPage=hasClass(document.body,"src");const hideSidebar=function(){if(isSrcPage){window.rustdocCloseSourceSidebar();updateLocalStorage("src-sidebar-width",null);document.documentElement.style.removeProperty("--src-sidebar-width");sidebar.style.removeProperty("--src-sidebar-width");resizer.style.removeProperty("--src-sidebar-width")}else{addClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","true");updateLocalStorage("desktop-sidebar-width",null);document.documentElement.style.removeProperty("--desktop-sidebar-width");sidebar.style.removeProperty("--desktop-sidebar-width");resizer.style.removeProperty("--desktop-sidebar-width")}};const showSidebar=function(){if(isSrcPage){window.rustdocShowSourceSidebar()}else{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false")}};const changeSidebarSize=function(size){if(isSrcPage){updateLocalStorage("src-sidebar-width",size.toString());sidebar.style.setProperty("--src-sidebar-width",size+"px");resizer.style.setProperty("--src-sidebar-width",size+"px")}else{updateLocalStorage("desktop-sidebar-width",size.toString());sidebar.style.setProperty("--desktop-sidebar-width",size+"px");resizer.style.setProperty("--desktop-sidebar-width",size+"px")}};const isSidebarHidden=function(){return isSrcPage?!hasClass(document.documentElement,"src-sidebar-expanded"):hasClass(document.documentElement,"hide-sidebar")};const resize=function(e){if(currentPointerId===null||currentPointerId!==e.pointerId){return}e.preventDefault();const pos=e.clientX-3;if(pos=SIDEBAR_MIN){if(isSidebarHidden()){showSidebar()}const constrainedPos=Math.min(pos,window.innerWidth-BODY_MIN,SIDEBAR_MAX);changeSidebarSize(constrainedPos);desiredSidebarSize=constrainedPos;if(pendingSidebarResizingFrame!==false){clearTimeout(pendingSidebarResizingFrame)}pendingSidebarResizingFrame=setTimeout(()=>{if(currentPointerId===null||pendingSidebarResizingFrame===false){return}pendingSidebarResizingFrame=false;document.documentElement.style.setProperty("--resizing-sidebar-width",desiredSidebarSize+"px",)},100)}};window.addEventListener("resize",()=>{if(window.innerWidth=(window.innerWidth-BODY_MIN)){changeSidebarSize(window.innerWidth-BODY_MIN)}else if(desiredSidebarSize!==null&&desiredSidebarSize>SIDEBAR_MIN){changeSidebarSize(desiredSidebarSize)}});const stopResize=function(e){if(currentPointerId===null){return}if(e){e.preventDefault()}desiredSidebarSize=sidebar.getBoundingClientRect().width;removeClass(resizer,"active");window.removeEventListener("pointermove",resize,false);window.removeEventListener("pointerup",stopResize,false);removeClass(document.documentElement,"sidebar-resizing");document.documentElement.style.removeProperty("--resizing-sidebar-width");if(resizer.releasePointerCapture){resizer.releasePointerCapture(currentPointerId);currentPointerId=null}};const initResize=function(e){if(currentPointerId!==null||e.altKey||e.ctrlKey||e.metaKey||e.button!==0){return}if(resizer.setPointerCapture){resizer.setPointerCapture(e.pointerId);if(!resizer.hasPointerCapture(e.pointerId)){resizer.releasePointerCapture(e.pointerId);return}currentPointerId=e.pointerId}window.hideAllModals(false);e.preventDefault();window.addEventListener("pointermove",resize,false);window.addEventListener("pointercancel",stopResize,false);window.addEventListener("pointerup",stopResize,false);addClass(resizer,"active");addClass(document.documentElement,"sidebar-resizing");const pos=e.clientX-sidebar.offsetLeft-3;document.documentElement.style.setProperty("--resizing-sidebar-width",pos+"px");desiredSidebarSize=null};resizer.addEventListener("pointerdown",initResize,false)}());(function(){function copyContentToClipboard(content){if(content===null){return}const el=document.createElement("textarea");el.value=content;el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el)}function copyButtonAnimation(button){button.classList.add("clicked");if(button.reset_button_timeout!==undefined){clearTimeout(button.reset_button_timeout)}button.reset_button_timeout=setTimeout(()=>{button.reset_button_timeout=undefined;button.classList.remove("clicked")},1000)}const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const titleElement=document.querySelector("title");const title=titleElement&&titleElement.textContent?titleElement.textContent.replace(" - Rust",""):"";const[item,module]=title.split(" in ");const path=[item];if(module!==undefined){path.unshift(module)}copyContentToClipboard(path.join("::"));copyButtonAnimation(but)};function copyCode(codeElem){if(!codeElem){return}copyContentToClipboard(codeElem.textContent)}function getExampleWrap(event){const target=event.target;if(target instanceof HTMLElement){let elem=target;while(elem!==null&&!hasClass(elem,"example-wrap")){if(elem===document.body||elem.tagName==="A"||elem.tagName==="BUTTON"||hasClass(elem,"docblock")){return null}elem=elem.parentElement}return elem}else{return null}}function addCopyButton(event){const elem=getExampleWrap(event);if(elem===null){return}elem.removeEventListener("mouseover",addCopyButton);const parent=document.createElement("div");parent.className="button-holder";const runButton=elem.querySelector(".test-arrow");if(runButton!==null){parent.appendChild(runButton)}elem.appendChild(parent);const copyButton=document.createElement("button");copyButton.className="copy-button";copyButton.title="Copy code to clipboard";copyButton.addEventListener("click",()=>{copyCode(elem.querySelector("pre > code"));copyButtonAnimation(copyButton)});parent.appendChild(copyButton);if(!elem.parentElement||!elem.parentElement.classList.contains("scraped-example")||!window.updateScrapedExample){return}const scrapedWrapped=elem.parentElement;window.updateScrapedExample(scrapedWrapped,parent)}function showHideCodeExampleButtons(event){const elem=getExampleWrap(event);if(elem===null){return}let buttons=elem.querySelector(".button-holder");if(buttons===null){addCopyButton(event);buttons=elem.querySelector(".button-holder");if(buttons===null){return}}buttons.classList.toggle("keep-visible")}onEachLazy(document.querySelectorAll(".docblock .example-wrap"),elem=>{elem.addEventListener("mouseover",addCopyButton);elem.addEventListener("click",showHideCodeExampleButtons)})}()) \ No newline at end of file diff --git a/docs/static.files/noscript-32bb7600.css b/docs/static.files/noscript-32bb7600.css new file mode 100644 index 0000000..c228ec4 --- /dev/null +++ b/docs/static.files/noscript-32bb7600.css @@ -0,0 +1 @@ + #main-content .attributes{margin-left:0 !important;}#copy-path,#sidebar-button,.sidebar-resizer{display:none !important;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;}:root,:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--sidebar-border-color:#ddd;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#595959;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}@media (prefers-color-scheme:dark){:root,:root:not([data-theme]){--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--sidebar-border-color:#2A2A2A;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#a5a5a5;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(65%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}} \ No newline at end of file diff --git a/docs/static.files/noscript-893ab5e7.css b/docs/static.files/noscript-893ab5e7.css deleted file mode 100644 index a6c18ec..0000000 --- a/docs/static.files/noscript-893ab5e7.css +++ /dev/null @@ -1 +0,0 @@ - #main-content .attributes{margin-left:0 !important;}#copy-path,#sidebar-button,.sidebar-resizer{display:none !important;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;}:root,:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#595959;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}@media (prefers-color-scheme:dark){:root,:root:not([data-theme]){--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#a5a5a5;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(65%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}} \ No newline at end of file diff --git a/docs/static.files/rustdoc-46132b98.css b/docs/static.files/rustdoc-46132b98.css deleted file mode 100644 index 2efac0b..0000000 --- a/docs/static.files/rustdoc-46132b98.css +++ /dev/null @@ -1,53 +0,0 @@ - :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;--desktop-sidebar-width:200px;--src-sidebar-width:300px;--desktop-sidebar-z-index:100;--sidebar-elems-left-padding:24px;--clipboard-image:url('data:image/svg+xml,\ -\ -\ -');--copy-path-height:34px;--copy-path-width:33px;--checkmark-image:url('data:image/svg+xml,\ -\ -');--button-left-margin:4px;--button-border-radius:2px;--toolbar-button-border-radius:6px;--code-block-border-radius:6px;--impl-items-indent:0.3em;--docblock-indent:24px;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-0fe48ade.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-e1aa3f0a.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-6b053e98.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-ca3b17ed.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-6d4fd4c0.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-8badfe75.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-fc8b9304.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-aa29a496.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-13b3dcba.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;grid-area:main-heading-h1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{position:relative;display:grid;grid-template-areas:"main-heading-breadcrumbs main-heading-breadcrumbs" "main-heading-h1 main-heading-toolbar" "main-heading-sub-heading main-heading-toolbar";grid-template-columns:minmax(105px,1fr) minmax(0,max-content);grid-template-rows:minmax(25px,min-content) min-content min-content;padding-bottom:6px;margin-bottom:15px;}.rustdoc-breadcrumbs{grid-area:main-heading-breadcrumbs;line-height:1.25;display:flex;flex-wrap:wrap;align-items:end;padding-top:5px;}.rustdoc-breadcrumbs a{padding:4px 0;margin:-4px 0;z-index:1;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}.structfield,.sub-variant-field{margin:0.6em 0;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,.sub-heading,span.since,a.src,rustdoc-toolbar,summary.hideme,.scraped-example-list,.rustdoc-breadcrumbs,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.search-results li,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,.code-header,.type-signature{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap .src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.logo-container{line-height:0;display:block;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 var(--desktop-sidebar-width);width:var(--desktop-sidebar-width);overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;z-index:var(--desktop-sidebar-z-index);}.rustdoc.src .sidebar{flex-basis:50px;width:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.hide-sidebar .sidebar,.hide-sidebar .sidebar-resizer{display:none;}.sidebar-resizer{touch-action:none;width:9px;cursor:col-resize;z-index:calc(var(--desktop-sidebar-z-index) + 1);position:fixed;height:100%;left:calc(var(--desktop-sidebar-width) + 1px);}.rustdoc.src .sidebar-resizer{left:49px;}.src-sidebar-expanded .src .sidebar-resizer{left:var(--src-sidebar-width);}.sidebar-resizing{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.sidebar-resizing*{cursor:col-resize !important;}.sidebar-resizing .sidebar{position:fixed;}.sidebar-resizing>body{padding-left:var(--resizing-sidebar-width);}.sidebar-resizer:hover,.sidebar-resizer:active,.sidebar-resizer:focus,.sidebar-resizer.active{width:10px;margin:0;left:var(--desktop-sidebar-width);border-left:solid 1px var(--sidebar-resizer-hover);}.src-sidebar-expanded .rustdoc.src .sidebar-resizer:hover,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:active,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:focus,.src-sidebar-expanded .rustdoc.src .sidebar-resizer.active{left:calc(var(--src-sidebar-width) - 1px);}@media (pointer:coarse){.sidebar-resizer{display:none !important;}}.sidebar-resizer.active{padding:0 140px;width:2px;margin-left:-140px;border-left:none;}.sidebar-resizer.active:before{border-left:solid 2px var(--sidebar-resizer-active);display:block;height:100%;content:"";}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}.src .sidebar>*{visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:var(--src-sidebar-width);width:var(--src-sidebar-width);}.src-sidebar-expanded .src .sidebar>*{visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.logo-container>img{height:48px;width:48px;}ul.block,.block li,.block ul{padding:0;margin:0;list-style:none;}.block ul a{padding-left:1rem;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-right:0.25rem;border-left:solid var(--sidebar-elems-left-padding) transparent;margin-left:calc(-0.25rem - var(--sidebar-elems-left-padding));background-clip:border-box;}.hide-toc #rustdoc-toc,.hide-toc .in-crate{display:none;}.hide-modnav #rustdoc-modnav{display:none;}.sidebar h2{text-wrap:balance;overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{text-wrap:balance;overflow-wrap:anywhere;font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>.version,.sidebar>h2{padding-left:var(--sidebar-elems-left-padding);}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar .current a,.sidebar-crate a.logo-container:hover+h2 a,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.sidebar-crate{display:flex;align-items:center;justify-content:center;margin:14px 32px 1rem;row-gap:10px;column-gap:32px;flex-wrap:wrap;}.sidebar-crate h2{flex-grow:1;margin:0 -8px;align-self:start;}.sidebar-crate .logo-container{margin:0 calc(-16px - var(--sidebar-elems-left-padding));padding:0 var(--sidebar-elems-left-padding);text-align:center;}.sidebar-crate .logo-container img{margin-top:-16px;border-top:solid 16px transparent;box-sizing:content-box;position:relative;background-clip:border-box;z-index:1;}.sidebar-crate h2 a{display:block;border-left:solid var(--sidebar-elems-left-padding) transparent;background-clip:border-box;margin:0 calc(-24px + 0.25rem) 0 calc(-0.2rem - var(--sidebar-elems-left-padding));padding:calc((16px - 0.57rem ) / 2 ) 0.25rem;padding-left:0.2rem;}.sidebar-crate h2 .version{display:block;font-weight:normal;font-size:1rem;overflow-wrap:break-word;}.sidebar-crate+.version{margin-top:-1rem;margin-bottom:1rem;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap>pre,.rustdoc .scraped-example .src-line-numbers,.rustdoc .scraped-example .src-line-numbers>pre{border-radius:6px;}.rustdoc .example-wrap>.example-line-numbers,.rustdoc .scraped-example .src-line-numbers,.rustdoc .scraped-example .src-line-numbers>pre{border-top-right-radius:0;border-bottom-right-radius:0;}.rustdoc .example-wrap>.example-line-numbers+pre,.rustdoc .scraped-example .rust{border-top-left-radius:0;border-bottom-left-radius:0;}.rustdoc .scraped-example{position:relative;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.scraped-example:not(.expanded) .example-wrap{max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .example-wrap{max-height:calc(1.5em * 10 + 10px);}.rustdoc:not(.src) .scraped-example:not(.expanded) .src-line-numbers,.rustdoc:not(.src) .scraped-example:not(.expanded) .src-line-numbers>pre,.rustdoc:not(.src) .scraped-example:not(.expanded) pre.rust{padding-bottom:0;overflow:auto hidden;}.rustdoc:not(.src) .scraped-example .src-line-numbers{padding-top:0;}.rustdoc:not(.src) .scraped-example.expanded .src-line-numbers{padding-bottom:0;}.rustdoc:not(.src) .example-wrap pre{overflow:auto;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap .src-line-numbers{min-width:fit-content;flex-grow:0;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;padding-right:2px;color:var(--src-line-numbers-span-color);}.rustdoc .scraped-example .example-wrap .src-line-numbers{padding:0;}.rustdoc .src-line-numbers pre{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:var(--docblock-indent);position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.sub-heading{font-size:1rem;flex-grow:0;grid-area:main-heading-sub-heading;line-height:1.25;padding-bottom:4px;}.main-heading rustdoc-toolbar,.main-heading .out-of-band{grid-area:main-heading-toolbar;}rustdoc-toolbar{display:flex;flex-direction:row;flex-wrap:nowrap;min-height:60px;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap,.example-wrap .src-line-numbers{background-color:var(--code-block-background-color);border-radius:var(--code-block-border-radius);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.docblock .stab,.docblock-short .stab,.docblock p code{display:inline-block;}.docblock li{margin-bottom:.4em;}.docblock li p:not(:last-child){margin-bottom:.3em;}div.where{white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:var(--docblock-indent);}.impl-items>.item-info{margin-left:calc(var(--docblock-indent) + var(--impl-items-indent));}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 0 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;margin-bottom:4px;}.src nav.sub{margin:0 0 -10px 0;}.section-header{display:block;position:relative;}.section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.section-header>.anchor{left:-15px;padding-right:8px;}h2.section-header>.anchor{padding-right:6px;}a.doc-anchor{color:var(--main-color);display:none;position:absolute;left:-17px;padding-right:10px;padding-left:3px;}*:hover>.doc-anchor{display:block;}.top-doc>.docblock>*:first-child>.doc-anchor{display:none !important;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.scrape-help):not(.tooltip):hover:not(.doc-anchor),.docblock-short a:not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block li.current a{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;width:100%;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}.search-results-title+.sub-heading{color:var(--main-color);display:flex;align-items:baseline;white-space:nowrap;}#crate-search-div{position:relative;min-width:0;}#crate-search{padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ - ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;margin:0;padding:0;}.search-results>a{display:grid;grid-template-areas:"search-result-name search-result-desc" "search-result-type-signature search-result-type-signature";grid-template-columns:.6fr .4fr;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);column-gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;grid-area:search-result-desc;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;grid-area:search-result-name;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.search-results .type-signature{grid-area:search-result-type-signature;white-space:pre-wrap;}.popover{position:absolute;top:100%;right:0;z-index:calc(var(--desktop-sidebar-z-index) + 1);margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ - \ - ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#settings.popover{--popover-arrow-offset:202px;top:calc(100% - 16px);}#help.popover{max-width:600px;--popover-arrow-offset:118px;top:calc(100% - 16px);}#help dt{float:left;clear:left;margin-right:0.5rem;}#help dd{margin-bottom:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;padding:0 0.5rem;text-wrap-style:balance;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side{display:flex;margin-bottom:20px;}.side-by-side>div{width:50%;padding:0 20px 0 17px;}.item-info .stab{display:block;padding:3px;margin-bottom:5px;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;vertical-align:baseline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji,.item-info .stab::before{font-size:1.25rem;}.stab .emoji{margin-right:0.3rem;}.item-info .stab::before{content:"\0";width:0;display:inline-block;color:transparent;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band,.sub-heading,rustdoc-toolbar{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}.top-doc>.docblock>.warning:first-child::before{top:20px;}.example-wrap>a.test-arrow,.example-wrap .button-holder{visibility:hidden;position:absolute;top:4px;right:4px;z-index:1;}a.test-arrow{height:var(--copy-path-height);padding:6px 4px 0 11px;}a.test-arrow::before{content:url('data:image/svg+xml,');}.example-wrap .button-holder{display:flex;}@media not (pointer:coarse){.example-wrap:hover>a.test-arrow,.example-wrap:hover>.button-holder{visibility:visible;}}.example-wrap .button-holder.keep-visible{visibility:visible;}.example-wrap .button-holder>*{background:var(--main-background-color);cursor:pointer;border-radius:var(--button-border-radius);height:var(--copy-path-height);width:var(--copy-path-width);border:0;color:var(--code-example-button-color);}.example-wrap .button-holder>*:hover{color:var(--code-example-button-hover-color);}.example-wrap .button-holder>*:not(:first-child){margin-left:var(--button-left-margin);}.example-wrap .button-holder .copy-button{padding:2px 0 0 4px;}.example-wrap .button-holder .copy-button::before,.example-wrap .test-arrow::before{filter:var(--copy-path-img-filter);}.example-wrap .button-holder .copy-button::before{content:var(--clipboard-image);}.example-wrap .button-holder .copy-button:hover::before,.example-wrap .test-arrow:hover::before{filter:var(--copy-path-img-hover-filter);}.example-wrap .button-holder .copy-button.clicked::before{content:var(--checkmark-image);padding-right:5px;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.main-heading span.since::before{content:"Since ";}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}@keyframes targetfadein{from{background-color:var(--main-background-color);}10%{background-color:var(--target-border-color);}to{background-color:var(--target-background-color);}}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}@media not (prefers-reduced-motion){:target{animation:0.65s cubic-bezier(0,0,0.1,1.0) 0.1s targetfadein;}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{margin-top:0.25rem;display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}.src-sidebar-title{position:sticky;top:0;display:flex;padding:8px 8px 0 48px;margin-bottom:7px;background:var(--sidebar-background-color);border-bottom:1px solid var(--border-color);}#settings-menu,#help-button,button#toggle-all-docs{margin-left:var(--button-left-margin);display:flex;line-height:1.25;min-width:14px;}#sidebar-button{display:none;line-height:0;}.hide-sidebar #sidebar-button,.src #sidebar-button{display:flex;margin-right:4px;position:fixed;left:6px;height:34px;width:34px;background-color:var(--main-background-color);z-index:1;}.src #sidebar-button{left:8px;z-index:calc(var(--desktop-sidebar-z-index) + 1);}.hide-sidebar .src #sidebar-button{position:static;}#settings-menu>a,#help-button>a,#sidebar-button>a,button#toggle-all-docs{display:flex;align-items:center;justify-content:center;flex-direction:column;border:1px solid transparent;border-radius:var(--button-border-radius);color:var(--main-color);}#settings-menu>a,#help-button>a,button#toggle-all-docs{width:80px;border-radius:var(--toolbar-button-border-radius);}#settings-menu>a,#help-button>a{min-width:0;}#sidebar-button>a{background-color:var(--button-background-color);border-color:var(--border-color);width:33px;}#settings-menu>a:hover,#settings-menu>a:focus-visible,#help-button>a:hover,#help-button>a:focus-visible,#sidebar-button>a:hover,#sidebar-button>a:focus-visible,button#toggle-all-docs:hover,button#toggle-all-docs:focus-visible{border-color:var(--settings-button-border-focus);text-decoration:none;}#settings-menu>a:before{content:url('data:image/svg+xml,\ - ');width:18px;height:18px;filter:var(--settings-menu-filter);}button#toggle-all-docs:before{content:url('data:image/svg+xml,\ - ');width:18px;height:18px;filter:var(--settings-menu-filter);}#help-button>a:before{content:url('data:image/svg+xml,\ - \ - ?');width:18px;height:18px;filter:var(--settings-menu-filter);}button#toggle-all-docs:before,#help-button>a:before,#settings-menu>a:before{filter:var(--settings-menu-filter);margin:8px;}@media not (pointer:coarse){button#toggle-all-docs:hover:before,#help-button>a:hover:before,#settings-menu>a:hover:before{filter:var(--settings-menu-hover-filter);}}button[disabled]#toggle-all-docs{opacity:0.25;border:solid 1px var(--main-background-color);background-size:cover;}button[disabled]#toggle-all-docs:hover{border:solid 1px var(--main-background-color);cursor:not-allowed;}rustdoc-toolbar span.label{font-size:1rem;flex-grow:1;padding-bottom:4px;}#sidebar-button>a:before{content:url('data:image/svg+xml,\ - \ - \ - ');width:22px;height:22px;}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:var(--copy-path-height);width:var(--copy-path-width);margin-left:10px;padding:0;padding-left:2px;border:0;font-size:0;}#copy-path::before{filter:var(--copy-path-img-filter);content:var(--clipboard-image);}#copy-path:hover::before{filter:var(--copy-path-img-hover-filter);}#copy-path.clicked::before{content:var(--checkmark-image);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.big-toggle{contain:inline-size;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,\ - ');content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}.impl-items>*:not(.item-info),.implementors-toggle>.docblock{margin-left:var(--impl-items-indent);}details.big-toggle>summary:not(.hideme)::before{left:-34px;top:9px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,\ - ');}details.toggle[open] >summary::after{content:"Collapse";}details.toggle:not([open])>summary .docblock{max-height:calc(1.5em + 0.75em);overflow-y:hidden;}details.toggle:not([open])>summary .docblock>:first-child{max-width:100%;overflow:hidden;width:fit-content;white-space:nowrap;position:relative;padding-right:1em;}details.toggle:not([open])>summary .docblock>:first-child::after{content:"…";position:absolute;right:0;top:0;bottom:0;z-index:1;background-color:var(--main-background-color);font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;padding-left:0.2em;}details.toggle:not([open])>summary .docblock>div:first-child::after{padding-top:calc(1.5em + 0.75em - 1.2rem);}details.toggle>summary .docblock{margin-top:0.75em;}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}.src #sidebar-button>a:before,.sidebar-menu-toggle:before{content:url('data:image/svg+xml,\ - ');opacity:0.75;}.sidebar-menu-toggle:hover:before,.sidebar-menu-toggle:active:before,.sidebar-menu-toggle:focus:before{opacity:1;}.src #sidebar-button>a:before{content:url('data:image/svg+xml,\ - \ - \ - ');opacity:0.75;}@media (max-width:850px){#search-tabs .count{display:block;}.side-by-side{flex-direction:column-reverse;}.side-by-side>div{width:auto;}}@media (max-width:700px){:root{--impl-items-indent:0.7em;}*[id]{scroll-margin-top:45px;}#copy-path{width:0;visibility:hidden;}rustdoc-toolbar span.label{display:none;}#settings-menu>a,#help-button>a,button#toggle-all-docs{width:33px;}#settings.popover{--popover-arrow-offset:86px;}#help.popover{--popover-arrow-offset:48px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.sidebar .logo-container,.sidebar .location,.sidebar-resizer{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.src .search-form{margin-left:40px;}.src .main-heading{margin-left:8px;}.hide-sidebar .search-form{margin-left:32px;}.hide-sidebar .src .search-form{margin-left:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;white-space:nowrap;text-overflow:ellipsis;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.hide-sidebar .mobile-topbar{display:none;}.sidebar-menu-toggle{width:45px;border:none;line-height:0;}.hide-sidebar .sidebar-menu-toggle{display:none;}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#sidebar-button>a:before{content:url('data:image/svg+xml,\ - \ - \ - ');width:22px;height:22px;}.sidebar-menu-toggle:before{filter:var(--mobile-sidebar-menu-filter);}.sidebar-menu-toggle:hover{background:var(--main-background-color);}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{position:fixed;max-width:100vw;width:100vw;}.src .src-sidebar-title{padding-top:0;}details.implementors-toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before{left:-20px;}summary>.item-info{margin-left:10px;}.impl-items>.item-info{margin-left:calc(var(--impl-items-indent) + 10px);}.src nav.sub{margin:0 0 -25px 0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}.item-table>li>.item-name{width:33%;}.item-table>li>div{overflow-wrap:anywhere;}}@media print{:root{--docblock-indent:0;}nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}main{padding:10px;}}@media (max-width:464px){:root{--docblock-indent:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example:not(.expanded) .example-wrap::before,.scraped-example:not(.expanded) .example-wrap::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .example-wrap::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .example-wrap::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded){width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded){overflow-x:hidden;}.scraped-example .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;}:root[data-theme="light"],:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#595959;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="dark"]{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#a5a5a5;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(65%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="ayu"]{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--code-example-button-color:#b2b2b2;--code-example-button-hover-color:#fff;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--settings-menu-filter:invert(70%);--settings-menu-hover-filter:invert(100%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);--sidebar-resizer-hover:hsl(34,50%,33%);--sidebar-resizer-active:hsl(34,100%,66%);}:root[data-theme="ayu"] h1,:root[data-theme="ayu"] h2,:root[data-theme="ayu"] h3,:root[data-theme="ayu"] h4,:where(:root[data-theme="ayu"]) h1 a,:root[data-theme="ayu"] .sidebar h2 a,:root[data-theme="ayu"] .sidebar h3 a{color:#fff;}:root[data-theme="ayu"] .docblock code{color:#ffb454;}:root[data-theme="ayu"] .docblock a>code{color:#39AFD7 !important;}:root[data-theme="ayu"] .code-header,:root[data-theme="ayu"] .docblock pre>code,:root[data-theme="ayu"] pre,:root[data-theme="ayu"] pre>code,:root[data-theme="ayu"] .item-info code,:root[data-theme="ayu"] .rustdoc.source .example-wrap{color:#e6e1cf;}:root[data-theme="ayu"] .sidebar .current,:root[data-theme="ayu"] .sidebar .current a,:root[data-theme="ayu"] .sidebar a:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:hover,:root[data-theme="ayu"] details.dir-entry summary:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:focus,:root[data-theme="ayu"] details.dir-entry summary:focus,:root[data-theme="ayu"] #src-sidebar div.files>a.selected{color:#ffb44c;}:root[data-theme="ayu"] .sidebar-elems .location{color:#ff7733;}:root[data-theme="ayu"] .src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}:root[data-theme="ayu"] .search-results a:hover,:root[data-theme="ayu"] .search-results a:focus{color:#fff !important;background-color:#3c3c3c;}:root[data-theme="ayu"] .search-results a{color:#0096cf;}:root[data-theme="ayu"] .search-results a div.desc{color:#c5c5c5;}:root[data-theme="ayu"] .result-name .primitive>i,:root[data-theme="ayu"] .result-name .keyword>i{color:#788797;}:root[data-theme="ayu"] #search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}:root[data-theme="ayu"] #search-tabs>button:not(.selected){border:none;background-color:transparent !important;}:root[data-theme="ayu"] #search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}:root[data-theme="ayu"] #settings-menu>a img,:root[data-theme="ayu"] #sidebar-button>a:before{filter:invert(100);} \ No newline at end of file diff --git a/docs/static.files/rustdoc-84e720fa.css b/docs/static.files/rustdoc-84e720fa.css new file mode 100644 index 0000000..de116b6 --- /dev/null +++ b/docs/static.files/rustdoc-84e720fa.css @@ -0,0 +1,59 @@ + :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;--desktop-sidebar-width:200px;--src-sidebar-width:300px;--desktop-sidebar-z-index:100;--sidebar-elems-left-padding:24px;--clipboard-image:url('data:image/svg+xml,\ +\ +\ +');--copy-path-height:34px;--copy-path-width:33px;--checkmark-image:url('data:image/svg+xml,\ +\ +');--button-left-margin:4px;--button-border-radius:2px;--toolbar-button-border-radius:6px;--code-block-border-radius:6px;--impl-items-indent:0.3em;--docblock-indent:24px;--font-family:"Source Serif 4",NanumBarunGothic,serif;--font-family-code:"Source Code Pro",monospace;--line-number-padding:4px;--line-number-right-margin:20px;--prev-arrow-image:url('data:image/svg+xml,');--next-arrow-image:url('data:image/svg+xml,');--expand-arrow-image:url('data:image/svg+xml,');--collapse-arrow-image:url('data:image/svg+xml,');--hamburger-image:url('data:image/svg+xml,\ + ');}:root.sans-serif{--font-family:"Fira Sans",sans-serif;--font-family-code:"Fira Mono",monospace;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-0fe48ade.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:italic;font-weight:400;src:local('Fira Sans Italic'),url("FiraSans-Italic-81dc35de.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-e1aa3f0a.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:italic;font-weight:500;src:local('Fira Sans Medium Italic'),url("FiraSans-MediumItalic-ccf7e434.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Mono';font-style:normal;font-weight:400;src:local('Fira Mono'),url("FiraMono-Regular-87c26294.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Mono';font-style:normal;font-weight:500;src:local('Fira Mono Medium'),url("FiraMono-Medium-86f75c8c.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-6b053e98.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-ca3b17ed.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:500;src:local('Source Serif 4 Semibold'),url("SourceSerif4-Semibold-457a13ac.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-6d4fd4c0.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-8badfe75.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-fc8b9304.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-aa29a496.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-13b3dcba.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 var(--font-family);margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;grid-area:main-heading-h1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{position:relative;display:grid;grid-template-areas:"main-heading-breadcrumbs main-heading-breadcrumbs" "main-heading-h1 main-heading-toolbar" "main-heading-sub-heading main-heading-toolbar";grid-template-columns:minmax(105px,1fr) minmax(0,max-content);grid-template-rows:minmax(25px,min-content) min-content min-content;padding-bottom:6px;margin-bottom:15px;}.rustdoc-breadcrumbs{grid-area:main-heading-breadcrumbs;line-height:1.25;padding-top:5px;position:relative;z-index:1;}.rustdoc-breadcrumbs a{padding:5px 0 7px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}.structfield,.sub-variant-field{margin:0.6em 0;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-table dt>a,.out-of-band,.sub-heading,span.since,a.src,rustdoc-toolbar,summary.hideme,.scraped-example-list,.rustdoc-breadcrumbs,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.search-results li,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,.code-header,.type-signature{font-family:var(--font-family-code);}.docblock code,.item-table dd code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.item-table dd pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;padding-left:16px;}img{max-width:100%;}.logo-container{line-height:0;display:block;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 var(--desktop-sidebar-width);width:var(--desktop-sidebar-width);overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;z-index:var(--desktop-sidebar-z-index);border-right:solid 1px var(--sidebar-border-color);}.rustdoc.src .sidebar{flex-basis:50px;width:50px;overflow-x:hidden;overflow-y:hidden;}.hide-sidebar .sidebar,.hide-sidebar .sidebar-resizer{display:none;}.sidebar-resizer{touch-action:none;width:9px;cursor:ew-resize;z-index:calc(var(--desktop-sidebar-z-index) + 1);position:fixed;height:100%;left:var(--desktop-sidebar-width);display:flex;align-items:center;justify-content:flex-start;color:var(--right-side-color);}.sidebar-resizer::before{content:"";border-right:dotted 2px currentColor;width:2px;height:12px;}.sidebar-resizer::after{content:"";border-right:dotted 2px currentColor;width:2px;height:16px;}.rustdoc.src .sidebar-resizer{left:49px;}.src-sidebar-expanded .src .sidebar-resizer{left:var(--src-sidebar-width);}.sidebar-resizing{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.sidebar-resizing *{cursor:ew-resize !important;}.sidebar-resizing .sidebar{position:fixed;border-right:solid 2px var(--sidebar-resizer-active);}.sidebar-resizing>body{padding-left:var(--resizing-sidebar-width);}.sidebar-resizer:hover,.sidebar-resizer:active,.sidebar-resizer:focus,.sidebar-resizer.active{width:10px;margin:0;left:calc(var(--desktop-sidebar-width) - 1px);border-left:solid 1px var(--sidebar-resizer-hover);color:var(--sidebar-resizer-hover);}.src-sidebar-expanded .rustdoc.src .sidebar-resizer:hover,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:active,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:focus,.src-sidebar-expanded .rustdoc.src .sidebar-resizer.active{left:calc(var(--src-sidebar-width) - 1px);}@media (pointer:coarse){.sidebar-resizer{display:none !important;}.sidebar{border-right:none;}}.sidebar-resizer.active{padding:0 140px;width:calc(140px + 140px + 9px + 2px);margin-left:-140px;border-left:none;color:var(--sidebar-resizer-active);}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}.src .sidebar>*{visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:var(--src-sidebar-width);width:var(--src-sidebar-width);}.src-sidebar-expanded .src .sidebar>*{visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.logo-container>img{height:48px;width:48px;}ul.block,.block li,.block ul{padding:0;margin:0;list-style:none;}.block ul a{padding-left:1rem;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-right:0.25rem;border-left:solid var(--sidebar-elems-left-padding) transparent;margin-left:calc(-0.25rem - var(--sidebar-elems-left-padding));background-clip:border-box;}.hide-toc #rustdoc-toc,.hide-toc .in-crate{display:none;}.hide-modnav #rustdoc-modnav{display:none;}.sidebar h2{text-wrap:balance;overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{text-wrap:balance;overflow-wrap:anywhere;font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>.version,.sidebar>h2{padding-left:var(--sidebar-elems-left-padding);}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar .current a,.sidebar-crate a.logo-container:hover+h2 a,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.sidebar-crate{display:flex;align-items:center;justify-content:center;margin:14px 32px 1rem;row-gap:10px;column-gap:32px;flex-wrap:wrap;}.sidebar-crate h2{flex-grow:1;margin:0 -8px;align-self:start;}.sidebar-crate .logo-container{margin:0 calc(-16px - var(--sidebar-elems-left-padding));padding:0 var(--sidebar-elems-left-padding);text-align:center;}.sidebar-crate .logo-container img{margin-top:-16px;border-top:solid 16px transparent;box-sizing:content-box;position:relative;background-clip:border-box;z-index:1;}.sidebar-crate h2 a{display:block;border-left:solid var(--sidebar-elems-left-padding) transparent;background-clip:border-box;margin:0 calc(-24px + 0.25rem) 0 calc(-0.2rem - var(--sidebar-elems-left-padding));padding:calc((16px - 0.57rem ) / 2 ) 0.25rem;padding-left:0.2rem;}.sidebar-crate h2 .version{display:block;font-weight:normal;font-size:1rem;overflow-wrap:break-word;}.sidebar-crate+.version{margin-top:-1rem;margin-bottom:1rem;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap>pre,.rustdoc .scraped-example .src-line-numbers,.rustdoc .scraped-example .src-line-numbers>pre{border-radius:6px;}.rustdoc .scraped-example{position:relative;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.scraped-example:not(.expanded) .example-wrap{max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .example-wrap{max-height:calc(1.5em * 10 + 10px);}.rustdoc:not(.src) .scraped-example:not(.expanded) .src-line-numbers,.rustdoc:not(.src) .scraped-example:not(.expanded) .src-line-numbers>pre,.rustdoc:not(.src) .scraped-example:not(.expanded) pre.rust{padding-bottom:0;overflow:auto hidden;}.rustdoc:not(.src) .scraped-example .src-line-numbers{padding-top:0;}.rustdoc:not(.src) .scraped-example.expanded .src-line-numbers{padding-bottom:0;}.rustdoc:not(.src) .example-wrap pre{overflow:auto;}.example-wrap.digits-1:not(.hide-lines) [data-nosnippet]{width:calc(1ch + var(--line-number-padding) * 2);}.example-wrap.digits-2:not(.hide-lines) [data-nosnippet]{width:calc(2ch + var(--line-number-padding) * 2);}.example-wrap.digits-3:not(.hide-lines) [data-nosnippet]{width:calc(3ch + var(--line-number-padding) * 2);}.example-wrap.digits-4:not(.hide-lines) [data-nosnippet]{width:calc(4ch + var(--line-number-padding) * 2);}.example-wrap.digits-5:not(.hide-lines) [data-nosnippet]{width:calc(5ch + var(--line-number-padding) * 2);}.example-wrap.digits-6:not(.hide-lines) [data-nosnippet]{width:calc(6ch + var(--line-number-padding) * 2);}.example-wrap.digits-7:not(.hide-lines) [data-nosnippet]{width:calc(7ch + var(--line-number-padding) * 2);}.example-wrap.digits-8:not(.hide-lines) [data-nosnippet]{width:calc(8ch + var(--line-number-padding) * 2);}.example-wrap.digits-9:not(.hide-lines) [data-nosnippet]{width:calc(9ch + var(--line-number-padding) * 2);}.example-wrap [data-nosnippet]{color:var(--src-line-numbers-span-color);text-align:right;display:inline-block;margin-right:var(--line-number-right-margin);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;padding:0 var(--line-number-padding);}.example-wrap [data-nosnippet]:target{border-right:none;}.example-wrap .line-highlighted[data-nosnippet]{background-color:var(--src-line-number-highlighted-background-color);}:root.word-wrap-source-code .example-wrap [data-nosnippet]{position:absolute;left:0;}.word-wrap-source-code .example-wrap pre>code{position:relative;word-break:break-all;}:root.word-wrap-source-code .example-wrap pre>code{display:block;white-space:pre-wrap;}:root.word-wrap-source-code .example-wrap pre>code *{word-break:break-all;}:root.word-wrap-source-code .example-wrap.digits-1 pre>code{padding-left:calc(1ch + var(--line-number-padding) * 2 + var(--line-number-right-margin));}:root.word-wrap-source-code .example-wrap.digits-2 pre>code{padding-left:calc(2ch + var(--line-number-padding) * 2 + var(--line-number-right-margin));}:root.word-wrap-source-code .example-wrap.digits-3 pre>code{padding-left:calc(3ch + var(--line-number-padding) * 2 + var(--line-number-right-margin));}:root.word-wrap-source-code .example-wrap.digits-4 pre>code{padding-left:calc(4ch + var(--line-number-padding) * 2 + var(--line-number-right-margin));}:root.word-wrap-source-code .example-wrap.digits-5 pre>code{padding-left:calc(5ch + var(--line-number-padding) * 2 + var(--line-number-right-margin));}:root.word-wrap-source-code .example-wrap.digits-6 pre>code{padding-left:calc(6ch + var(--line-number-padding) * 2 + var(--line-number-right-margin));}:root.word-wrap-source-code .example-wrap.digits-7 pre>code{padding-left:calc(7ch + var(--line-number-padding) * 2 + var(--line-number-right-margin));}:root.word-wrap-source-code .example-wrap.digits-8 pre>code{padding-left:calc(8ch + var(--line-number-padding) * 2 + var(--line-number-right-margin));}:root.word-wrap-source-code .example-wrap.digits-9 pre>code{padding-left:calc(9ch + var(--line-number-padding) * 2 + var(--line-number-right-margin));}.example-wrap.hide-lines [data-nosnippet]{display:none;}.search-loading{text-align:center;}.item-table dd{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.item-table dd code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:var(--docblock-indent);position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.sub-heading{font-size:1rem;flex-grow:0;grid-area:main-heading-sub-heading;line-height:1.25;padding-bottom:4px;}.main-heading rustdoc-toolbar,.main-heading .out-of-band{grid-area:main-heading-toolbar;}rustdoc-toolbar{display:flex;flex-direction:row;flex-wrap:nowrap;min-height:60px;}.docblock code,.item-table dd code,pre,.rustdoc.src .example-wrap,.example-wrap .src-line-numbers{background-color:var(--code-block-background-color);border-radius:var(--code-block-border-radius);text-decoration:inherit;}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.docblock .stab,.item-table dd .stab,.docblock p code{display:inline-block;}.docblock li{margin-bottom:.4em;}.docblock li p:not(:last-child){margin-bottom:.3em;}div.where{white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:var(--docblock-indent);}.impl-items>.item-info{margin-left:calc(var(--docblock-indent) + var(--impl-items-indent));}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 0 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;margin-bottom:4px;}.src nav.sub{margin:0 0 -10px 0;}.section-header{display:block;position:relative;}.section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.section-header>.anchor{left:-15px;padding-right:8px;}h2.section-header>.anchor{padding-right:6px;}a.doc-anchor{color:var(--main-color);display:none;position:absolute;left:-17px;padding-right:10px;padding-left:3px;}*:hover>.doc-anchor{display:block;}.top-doc>.docblock>*:first-child>.doc-anchor{display:none !important;}.main-heading a:hover,.example-wrap .rust a:hover:not([data-nosnippet]),.all-items a:hover,.docblock a:not(.scrape-help):not(.tooltip):hover:not(.doc-anchor),.item-table dd a:not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block li.current a{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{padding:0;margin:0;width:100%;}.item-table>dt{padding-right:1.25rem;}.item-table>dd{margin-inline-start:0;margin-left:0;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}.search-results-title+.sub-heading{color:var(--main-color);display:flex;align-items:baseline;white-space:nowrap;}#crate-search-div{position:relative;min-width:0;}#crate-search{padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ + ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;margin:0;padding:0;}.search-results>a{display:grid;grid-template-areas:"search-result-name search-result-desc" "search-result-type-signature search-result-type-signature";grid-template-columns:.6fr .4fr;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);column-gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;grid-area:search-result-desc;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;grid-area:search-result-name;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.search-results .type-signature{grid-area:search-result-type-signature;white-space:pre-wrap;}.popover{position:absolute;top:100%;right:0;z-index:calc(var(--desktop-sidebar-z-index) + 1);margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-check input{flex-shrink:0;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ + \ + ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#settings.popover{--popover-arrow-offset:202px;top:calc(100% - 16px);}#help.popover{max-width:600px;--popover-arrow-offset:118px;top:calc(100% - 16px);}#help dt{float:left;clear:left;margin-right:0.5rem;}#help dd{margin-bottom:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;padding:0 0.5rem;text-wrap-style:balance;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side{display:flex;margin-bottom:20px;}.side-by-side>div{width:50%;padding:0 20px 0 17px;}.item-info .stab{display:block;padding:3px;margin-bottom:5px;}.item-table dt .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;vertical-align:baseline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji,.item-info .stab::before{font-size:1.25rem;}.stab .emoji{margin-right:0.3rem;}.item-info .stab::before{content:"\0";width:0;display:inline-block;color:transparent;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band,.sub-heading,rustdoc-toolbar{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a:not([data-nosnippet]){background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}.top-doc>.docblock>.warning:first-child::before{top:20px;}.example-wrap>a.test-arrow,.example-wrap .button-holder{visibility:hidden;position:absolute;top:4px;right:4px;z-index:1;}a.test-arrow{height:var(--copy-path-height);padding:6px 4px 0 11px;}a.test-arrow::before{content:url('data:image/svg+xml,');}.example-wrap .button-holder{display:flex;}@media not (pointer:coarse){.example-wrap:hover>a.test-arrow,.example-wrap:hover>.button-holder{visibility:visible;}}.example-wrap .button-holder.keep-visible{visibility:visible;}.example-wrap .button-holder>*{background:var(--main-background-color);cursor:pointer;border-radius:var(--button-border-radius);height:var(--copy-path-height);width:var(--copy-path-width);border:0;color:var(--code-example-button-color);}.example-wrap .button-holder>*:hover{color:var(--code-example-button-hover-color);}.example-wrap .button-holder>*:not(:first-child){margin-left:var(--button-left-margin);}.example-wrap .button-holder .copy-button{padding:2px 0 0 4px;}.example-wrap .button-holder .copy-button::before,.example-wrap .test-arrow::before,.example-wrap .button-holder .prev::before,.example-wrap .button-holder .next::before,.example-wrap .button-holder .expand::before{filter:var(--copy-path-img-filter);}.example-wrap .button-holder .copy-button::before{content:var(--clipboard-image);}.example-wrap .button-holder .copy-button:hover::before,.example-wrap .test-arrow:hover::before{filter:var(--copy-path-img-hover-filter);}.example-wrap .button-holder .copy-button.clicked::before{content:var(--checkmark-image);padding-right:5px;}.example-wrap .button-holder .prev,.example-wrap .button-holder .next,.example-wrap .button-holder .expand{line-height:0px;}.example-wrap .button-holder .prev::before{content:var(--prev-arrow-image);}.example-wrap .button-holder .next::before{content:var(--next-arrow-image);}.example-wrap .button-holder .expand::before{content:var(--expand-arrow-image);}.example-wrap .button-holder .expand.collapse::before{content:var(--collapse-arrow-image);}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.main-heading span.since::before{content:"Since ";}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}@keyframes targetfadein{from{background-color:var(--main-background-color);}10%{background-color:var(--target-border-color);}to{background-color:var(--target-background-color);}}:target:not([data-nosnippet]){background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}@media not (prefers-reduced-motion){:target{animation:0.65s cubic-bezier(0,0,0.1,1.0) 0.1s targetfadein;}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{margin-top:0.25rem;display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}.src-sidebar-title{position:sticky;top:0;display:flex;padding:8px 8px 0 48px;margin-bottom:7px;background:var(--sidebar-background-color);border-bottom:1px solid var(--border-color);}#settings-menu,#help-button,button#toggle-all-docs{margin-left:var(--button-left-margin);display:flex;line-height:1.25;min-width:14px;}#sidebar-button{display:none;line-height:0;}.hide-sidebar #sidebar-button,.src #sidebar-button{display:flex;margin-right:4px;position:fixed;height:34px;width:34px;}.hide-sidebar #sidebar-button{left:6px;background-color:var(--main-background-color);z-index:1;}.src #sidebar-button{left:8px;z-index:calc(var(--desktop-sidebar-z-index) + 1);}.hide-sidebar .src #sidebar-button{position:static;}#settings-menu>a,#help-button>a,#sidebar-button>a,button#toggle-all-docs{display:flex;align-items:center;justify-content:center;flex-direction:column;}#settings-menu>a,#help-button>a,button#toggle-all-docs{border:1px solid transparent;border-radius:var(--button-border-radius);color:var(--main-color);}#settings-menu>a,#help-button>a,button#toggle-all-docs{width:80px;border-radius:var(--toolbar-button-border-radius);}#settings-menu>a,#help-button>a{min-width:0;}#sidebar-button>a{background-color:var(--sidebar-background-color);width:33px;}#sidebar-button>a:hover,#sidebar-button>a:focus-visible{background-color:var(--main-background-color);}#settings-menu>a:hover,#settings-menu>a:focus-visible,#help-button>a:hover,#help-button>a:focus-visible,button#toggle-all-docs:hover,button#toggle-all-docs:focus-visible{border-color:var(--settings-button-border-focus);text-decoration:none;}#settings-menu>a::before{content:url('data:image/svg+xml,\ + ');width:18px;height:18px;filter:var(--settings-menu-filter);}button#toggle-all-docs::before{content:url('data:image/svg+xml,\ + ');width:18px;height:18px;filter:var(--settings-menu-filter);}button#toggle-all-docs.will-expand::before{content:url('data:image/svg+xml,\ + ');}#help-button>a::before{content:url('data:image/svg+xml,\ + \ + ?');width:18px;height:18px;filter:var(--settings-menu-filter);}button#toggle-all-docs::before,#help-button>a::before,#settings-menu>a::before{filter:var(--settings-menu-filter);margin:8px;}@media not (pointer:coarse){button#toggle-all-docs:hover::before,#help-button>a:hover::before,#settings-menu>a:hover::before{filter:var(--settings-menu-hover-filter);}}button[disabled]#toggle-all-docs{opacity:0.25;border:solid 1px var(--main-background-color);background-size:cover;}button[disabled]#toggle-all-docs:hover{border:solid 1px var(--main-background-color);cursor:not-allowed;}rustdoc-toolbar span.label{font-size:1rem;flex-grow:1;padding-bottom:4px;}#sidebar-button>a::before{content:url('data:image/svg+xml,\ + \ + \ + ');width:22px;height:22px;}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:var(--copy-path-height);width:var(--copy-path-width);margin-left:10px;padding:0;padding-left:2px;border:0;font-size:0;}#copy-path::before{filter:var(--copy-path-img-filter);content:var(--clipboard-image);}#copy-path:hover::before{filter:var(--copy-path-img-hover-filter);}#copy-path.clicked::before{content:var(--checkmark-image);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.big-toggle{contain:inline-size;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,\ + ');content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>.methods>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}.impl-items>*:not(.item-info),.implementors-toggle>.docblock,#main-content>.methods>:not(.item-info),.impl>.item-info,.impl>.docblock,.impl+.docblock{margin-left:var(--impl-items-indent);}details.big-toggle>summary:not(.hideme)::before{left:-34px;top:9px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,\ + ');}details.toggle[open] >summary::after{content:"Collapse";}details.toggle:not([open])>summary .docblock{max-height:calc(1.5em + 0.75em);overflow-y:hidden;}details.toggle:not([open])>summary .docblock>:first-child{max-width:100%;overflow:hidden;width:fit-content;white-space:nowrap;position:relative;padding-right:1em;}details.toggle:not([open])>summary .docblock>:first-child::after{content:"…";position:absolute;right:0;top:0;bottom:0;z-index:1;background-color:var(--main-background-color);font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;padding-left:0.2em;}details.toggle:not([open])>summary .docblock>div:first-child::after{padding-top:calc(1.5em + 0.75em - 1.2rem);}details.toggle>summary .docblock{margin-top:0.75em;}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}.src #sidebar-button>a::before,.sidebar-menu-toggle::before{content:var(--hamburger-image);opacity:0.75;filter:var(--mobile-sidebar-menu-filter);}.sidebar-menu-toggle:hover::before,.sidebar-menu-toggle:active::before,.sidebar-menu-toggle:focus::before{opacity:1;}@media (max-width:850px){#search-tabs .count{display:block;}.side-by-side{flex-direction:column-reverse;}.side-by-side>div{width:auto;}}@media (max-width:700px){:root{--impl-items-indent:0.7em;}*[id]{scroll-margin-top:45px;}#copy-path{width:0;visibility:hidden;}rustdoc-toolbar span.label{display:none;}#settings-menu>a,#help-button>a,button#toggle-all-docs{width:33px;}#settings.popover{--popover-arrow-offset:86px;}#help.popover{--popover-arrow-offset:48px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.sidebar .logo-container,.sidebar .location,.sidebar-resizer{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);border-right:none;width:100%;}.sidebar-elems .block li a{white-space:wrap;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.src .search-form{margin-left:40px;}.src .main-heading{margin-left:8px;}.hide-sidebar .search-form{margin-left:32px;}.hide-sidebar .src .search-form{margin-left:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;white-space:nowrap;text-overflow:ellipsis;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.hide-sidebar .mobile-topbar{display:none;}.sidebar-menu-toggle{width:45px;border:none;line-height:0;}.hide-sidebar .sidebar-menu-toggle{display:none;}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#sidebar-button>a::before{content:url('data:image/svg+xml,\ + \ + \ + ');width:22px;height:22px;}.sidebar-menu-toggle:hover{background:var(--main-background-color);}.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table dd{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{position:fixed;max-width:100vw;width:100vw;}.src .src-sidebar-title{padding-top:0;}details.implementors-toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>.methods>details.toggle>summary:not(.hideme)::before{left:-20px;}summary>.item-info{margin-left:10px;}.impl-items>.item-info{margin-left:calc(var(--impl-items-indent) + 10px);}.src nav.sub{margin:0 0 -25px 0;padding:var(--nav-sub-mobile-padding);}html:not(.src-sidebar-expanded) .src #sidebar-button>a{background-color:var(--main-background-color);}html:not(.src-sidebar-expanded) .src #sidebar-button>a:hover,html:not(.src-sidebar-expanded) .src #sidebar-button>a:focus-visible{background-color:var(--sidebar-background-color);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}.item-table:not(.reexports){display:grid;grid-template-columns:33% 67%;}.item-table>dt,.item-table>dd{overflow-wrap:anywhere;}.item-table>dt{grid-column-start:1;}.item-table>dd{grid-column-start:2;}}@media print{:root{--docblock-indent:0;}nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}main{padding:10px;}}@media (max-width:464px){:root{--docblock-indent:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example:not(.expanded) .example-wrap::before,.scraped-example:not(.expanded) .example-wrap::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .example-wrap::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .example-wrap::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded){width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded){overflow-x:hidden;}.scraped-example .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;}:root[data-theme="light"],:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--sidebar-border-color:#ddd;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#595959;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="dark"]{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--sidebar-border-color:#999;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#a5a5a5;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(65%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="ayu"]{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--sidebar-border-color:#5c6773;--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--code-example-button-color:#b2b2b2;--code-example-button-hover-color:#fff;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--settings-menu-filter:invert(70%);--settings-menu-hover-filter:invert(100%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);--sidebar-resizer-hover:hsl(34,50%,33%);--sidebar-resizer-active:hsl(34,100%,66%);}:root[data-theme="ayu"] h1,:root[data-theme="ayu"] h2,:root[data-theme="ayu"] h3,:root[data-theme="ayu"] h4,:where(:root[data-theme="ayu"]) h1 a,:root[data-theme="ayu"] .sidebar h2 a,:root[data-theme="ayu"] .sidebar h3 a{color:#fff;}:root[data-theme="ayu"] .docblock code{color:#ffb454;}:root[data-theme="ayu"] .docblock a>code{color:#39AFD7 !important;}:root[data-theme="ayu"] .code-header,:root[data-theme="ayu"] .docblock pre>code,:root[data-theme="ayu"] pre,:root[data-theme="ayu"] pre>code,:root[data-theme="ayu"] .item-info code,:root[data-theme="ayu"] .rustdoc.source .example-wrap{color:#e6e1cf;}:root[data-theme="ayu"] .sidebar .current,:root[data-theme="ayu"] .sidebar .current a,:root[data-theme="ayu"] .sidebar a:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:hover,:root[data-theme="ayu"] details.dir-entry summary:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:focus,:root[data-theme="ayu"] details.dir-entry summary:focus,:root[data-theme="ayu"] #src-sidebar div.files>a.selected{color:#ffb44c;}:root[data-theme="ayu"] .sidebar-elems .location{color:#ff7733;}:root[data-theme="ayu"] a[data-nosnippet].line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}:root[data-theme="ayu"] .search-results a:hover,:root[data-theme="ayu"] .search-results a:focus{color:#fff !important;background-color:#3c3c3c;}:root[data-theme="ayu"] .search-results a{color:#0096cf;}:root[data-theme="ayu"] .search-results a div.desc{color:#c5c5c5;}:root[data-theme="ayu"] .result-name .primitive>i,:root[data-theme="ayu"] .result-name .keyword>i{color:#788797;}:root[data-theme="ayu"] #search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}:root[data-theme="ayu"] #search-tabs>button:not(.selected){border:none;background-color:transparent !important;}:root[data-theme="ayu"] #search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}:root[data-theme="ayu"] #settings-menu>a img,:root[data-theme="ayu"] #sidebar-button>a::before{filter:invert(100);} \ No newline at end of file diff --git a/docs/static.files/scrape-examples-5e967b76.js b/docs/static.files/scrape-examples-5e967b76.js new file mode 100644 index 0000000..d34361f --- /dev/null +++ b/docs/static.files/scrape-examples-5e967b76.js @@ -0,0 +1 @@ +"use strict";(function(){const DEFAULT_MAX_LINES=5;const HIDDEN_MAX_LINES=10;function scrollToLoc(elt,loc,isHidden){const lines=elt.querySelectorAll("[data-nosnippet]");let scrollOffset;const maxLines=isHidden?HIDDEN_MAX_LINES:DEFAULT_MAX_LINES;if(loc[1]-loc[0]>maxLines){const line=Math.max(0,loc[0]-1);scrollOffset=lines[line].offsetTop}else{const halfHeight=elt.offsetHeight/2;const offsetTop=lines[loc[0]].offsetTop;const lastLine=lines[loc[1]];const offsetBot=lastLine.offsetTop+lastLine.offsetHeight;const offsetMid=(offsetTop+offsetBot)/2;scrollOffset=offsetMid-halfHeight}lines[0].parentElement.scrollTo(0,scrollOffset);elt.querySelector(".rust").scrollTo(0,scrollOffset)}function createScrapeButton(parent,className,content){const button=document.createElement("button");button.className=className;button.title=content;parent.insertBefore(button,parent.firstChild);return button}window.updateScrapedExample=(example,buttonHolder)=>{let locIndex=0;const highlights=Array.prototype.slice.call(example.querySelectorAll(".highlight"));const link=example.querySelector(".scraped-example-title a");let expandButton=null;if(!example.classList.contains("expanded")){expandButton=createScrapeButton(buttonHolder,"expand","Show all")}const isHidden=example.parentElement.classList.contains("more-scraped-examples");const locs=example.locs;if(locs.length>1){const next=createScrapeButton(buttonHolder,"next","Next usage");const prev=createScrapeButton(buttonHolder,"prev","Previous usage");const onChangeLoc=changeIndex=>{removeClass(highlights[locIndex],"focus");changeIndex();scrollToLoc(example,locs[locIndex][0],isHidden);addClass(highlights[locIndex],"focus");const url=locs[locIndex][1];const title=locs[locIndex][2];link.href=url;link.innerHTML=title};prev.addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex-1+locs.length)%locs.length})});next.addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex+1)%locs.length})})}if(expandButton){expandButton.addEventListener("click",()=>{if(hasClass(example,"expanded")){removeClass(example,"expanded");removeClass(expandButton,"collapse");expandButton.title="Show all";scrollToLoc(example,locs[0][0],isHidden)}else{addClass(example,"expanded");addClass(expandButton,"collapse");expandButton.title="Show single example"}})}};function setupLoc(example,isHidden){example.locs=JSON.parse(example.attributes.getNamedItem("data-locs").textContent);scrollToLoc(example,example.locs[0][0],isHidden)}const firstExamples=document.querySelectorAll(".scraped-example-list > .scraped-example");onEachLazy(firstExamples,el=>setupLoc(el,false));onEachLazy(document.querySelectorAll(".more-examples-toggle"),toggle=>{onEachLazy(toggle.querySelectorAll(".toggle-line, .hide-more"),button=>{button.addEventListener("click",()=>{toggle.open=false})});const moreExamples=toggle.querySelectorAll(".scraped-example");toggle.querySelector("summary").addEventListener("click",()=>{setTimeout(()=>{onEachLazy(moreExamples,el=>setupLoc(el,true))})},{once:true})})})() \ No newline at end of file diff --git a/docs/static.files/scrape-examples-d508a8a9.js b/docs/static.files/scrape-examples-d508a8a9.js deleted file mode 100644 index 87b6065..0000000 --- a/docs/static.files/scrape-examples-d508a8a9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(function(){const DEFAULT_MAX_LINES=5;const HIDDEN_MAX_LINES=10;function scrollToLoc(elt,loc,isHidden){const lines=elt.querySelector(".src-line-numbers > pre");let scrollOffset;const maxLines=isHidden?HIDDEN_MAX_LINES:DEFAULT_MAX_LINES;if(loc[1]-loc[0]>maxLines){const line=Math.max(0,loc[0]-1);scrollOffset=lines.children[line].offsetTop}else{const halfHeight=elt.offsetHeight/2;const offsetTop=lines.children[loc[0]].offsetTop;const lastLine=lines.children[loc[1]];const offsetBot=lastLine.offsetTop+lastLine.offsetHeight;const offsetMid=(offsetTop+offsetBot)/2;scrollOffset=offsetMid-halfHeight}lines.parentElement.scrollTo(0,scrollOffset);elt.querySelector(".rust").scrollTo(0,scrollOffset)}function createScrapeButton(parent,className,content){const button=document.createElement("button");button.className=className;button.innerText=content;parent.insertBefore(button,parent.firstChild);return button}window.updateScrapedExample=(example,buttonHolder)=>{let locIndex=0;const highlights=Array.prototype.slice.call(example.querySelectorAll(".highlight"));const link=example.querySelector(".scraped-example-title a");let expandButton=null;if(!example.classList.contains("expanded")){expandButton=createScrapeButton(buttonHolder,"expand","↕")}const isHidden=example.parentElement.classList.contains("more-scraped-examples");const locs=example.locs;if(locs.length>1){const next=createScrapeButton(buttonHolder,"next","≻");const prev=createScrapeButton(buttonHolder,"prev","≺");const onChangeLoc=changeIndex=>{removeClass(highlights[locIndex],"focus");changeIndex();scrollToLoc(example,locs[locIndex][0],isHidden);addClass(highlights[locIndex],"focus");const url=locs[locIndex][1];const title=locs[locIndex][2];link.href=url;link.innerHTML=title};prev.addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex-1+locs.length)%locs.length})});next.addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex+1)%locs.length})})}if(expandButton){expandButton.addEventListener("click",()=>{if(hasClass(example,"expanded")){removeClass(example,"expanded");scrollToLoc(example,locs[0][0],isHidden)}else{addClass(example,"expanded")}})}};function setupLoc(example,isHidden){example.locs=JSON.parse(example.attributes.getNamedItem("data-locs").textContent);scrollToLoc(example,example.locs[0][0],isHidden)}const firstExamples=document.querySelectorAll(".scraped-example-list > .scraped-example");onEachLazy(firstExamples,el=>setupLoc(el,false));onEachLazy(document.querySelectorAll(".more-examples-toggle"),toggle=>{onEachLazy(toggle.querySelectorAll(".toggle-line, .hide-more"),button=>{button.addEventListener("click",()=>{toggle.open=false})});const moreExamples=toggle.querySelectorAll(".scraped-example");toggle.querySelector("summary").addEventListener("click",()=>{setTimeout(()=>{onEachLazy(moreExamples,el=>setupLoc(el,true))})},{once:true})})})() \ No newline at end of file diff --git a/docs/static.files/search-036cda7a.js b/docs/static.files/search-036cda7a.js deleted file mode 100644 index cf59d77..0000000 --- a/docs/static.files/search-036cda7a.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict";if(!Array.prototype.toSpliced){Array.prototype.toSpliced=function(){const me=this.slice();Array.prototype.splice.apply(me,arguments);return me}}function onEachBtwn(arr,func,funcBtwn){let skipped=true;for(const value of arr){if(!skipped){funcBtwn(value)}skipped=func(value)}}const itemTypes=["keyword","primitive","mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","associatedtype","constant","associatedconstant","union","foreigntype","existential","attr","derive","traitalias","generic",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_GENERIC=itemTypes.indexOf("generic");const TY_IMPORT=itemTypes.indexOf("import");const TY_TRAIT=itemTypes.indexOf("trait");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";const UNBOXING_LIMIT=5;const REGEX_IDENT=/\p{ID_Start}\p{ID_Continue}*|_\p{ID_Continue}+/uy;const REGEX_INVALID_TYPE_FILTER=/[^a-z]/ui;const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost,);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1,)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function isEndCharacter(c){return"=,>-])".indexOf(c)!==-1}function isSeparatorCharacter(c){return c===","||c==="="}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function skipWhitespace(parserState){while(parserState.pos0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(c!==" "){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function getFilteredNextElem(query,parserState,elems,isInGenerics){const start=parserState.pos;if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){throw["Expected type filter before ",":"]}getNextElem(query,parserState,elems,isInGenerics);if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}if(elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.normalizedPathLast;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;getNextElem(query,parserState,elems,isInGenerics)}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let foundSeparator=false;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;const oldIsInBinding=parserState.isInBinding;parserState.isInBinding=null;let hofParameters=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===")"){extra="("}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"," after ","="]}hofParameters=[...elems];elems.length=0;parserState.pos+=2;foundStopChar=true;foundSeparator=false;continue}else if(c===" "){parserState.pos+=1;continue}else if(isSeparatorCharacter(c)){parserState.pos+=1;foundStopChar=true;foundSeparator=true;continue}else if(c===":"&&isPathStart(parserState)){throw["Unexpected ","::",": paths cannot start with ","::"]}else if(isEndCharacter(c)){throw["Unexpected ",c," after ",extra]}if(!foundStopChar){let extra=[];if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",",",", ","=",", or ",endChar,...extra,", found ",c,]}throw["Expected ",","," or ","=",...extra,", found ",c,]}const posBefore=parserState.pos;getFilteredNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;if(hofParameters){foundSeparator=false;if([...elems,...hofParameters].some(x=>x.bindingName)||parserState.isInBinding){throw["Unexpected ","="," within ","->"]}const hofElem=makePrimitiveElement("->",{generics:hofParameters,bindings:new Map([["output",[...elems]]]),typeFilter:null,});elems.length=0;elems[0]=hofElem}parserState.typeFilter=oldTypeFilter;parserState.isInBinding=oldIsInBinding;return{foundSeparator}}function getNextElem(query,parserState,elems,isInGenerics){const generics=[];skipWhitespace(parserState);let start=parserState.pos;let end;if("[(".indexOf(parserState.userQuery[parserState.pos])!==-1){let endChar=")";let name="()";let friendlyName="tuple";if(parserState.userQuery[parserState.pos]==="["){endChar="]";name="[]";friendlyName="slice"}parserState.pos+=1;const{foundSeparator}=getItemsBefore(query,parserState,generics,endChar);const typeFilter=parserState.typeFilter;const bindingName=parserState.isInBinding;parserState.typeFilter=null;parserState.isInBinding=null;for(const gen of generics){if(gen.bindingName!==null){throw["Type parameter ","=",` cannot be within ${friendlyName} `,name]}}if(name==="()"&&!foundSeparator&&generics.length===1&&typeFilter===null){elems.push(generics[0])}else if(name==="()"&&generics.length===1&&generics[0].name==="->"){generics[0].typeFilter=typeFilter;elems.push(generics[0])}else{if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive ",name," and ",typeFilter," both specified",]}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}elems.push(makePrimitiveElement(name,{bindingName,generics}))}}else if(parserState.userQuery[parserState.pos]==="&"){if(parserState.typeFilter!==null&&parserState.typeFilter!=="primitive"){throw["Invalid search type: primitive ","&"," and ",parserState.typeFilter," both specified",]}parserState.typeFilter=null;parserState.pos+=1;let c=parserState.userQuery[parserState.pos];while(c===" "&&parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}else if(parserState.pos=end){throw["Found generics without a path"]}if(parserState.isInBinding){throw["Unexpected ","("," after ","="]}parserState.pos+=1;const typeFilter=parserState.typeFilter;parserState.typeFilter=null;getItemsBefore(query,parserState,generics,")");skipWhitespace(parserState);if(isReturnArrow(parserState)){parserState.pos+=2;skipWhitespace(parserState);getFilteredNextElem(query,parserState,generics,isInGenerics);generics[generics.length-1].bindingName=makePrimitiveElement("output")}else{generics.push(makePrimitiveElement(null,{bindingName:makePrimitiveElement("output"),typeFilter:null,}))}parserState.typeFilter=typeFilter}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}if(parserState.userQuery[parserState.pos]==="="){if(parserState.isInBinding){throw["Cannot write ","="," twice in a binding"]}if(!isInGenerics){throw["Type parameter ","="," must be within generics list"]}const name=parserState.userQuery.slice(start,end).trim();if(name==="!"){throw["Type parameter ","="," key cannot be ","!"," never type"]}if(name.includes("!")){throw["Type parameter ","="," key cannot be ","!"," macro"]}if(name.includes("::")){throw["Type parameter ","="," key cannot contain ","::"," path"]}if(name.includes(":")){throw["Type parameter ","="," key cannot contain ",":"," type"]}parserState.isInBinding={name,generics}}else{elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics,),)}}}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();const match=query.match(REGEX_INVALID_TYPE_FILTER);if(match){throw["Unexpected ",match[0]," in type filter (before ",":",")",]}}function createQueryElement(query,parserState,name,generics,isInGenerics){const path=name.trim();if(path.length===0&&generics.length===0){throw["Unexpected ",parserState.userQuery[parserState.pos]]}if(query.literalSearch&&parserState.totalElems-parserState.genericsElems>0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name.trim()==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}const bindingName=parserState.isInBinding;parserState.isInBinding=null;return makePrimitiveElement("never",{bindingName})}const quadcolon=/::\s*::/.exec(path);if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(quadcolon!==null){throw["Unexpected ",quadcolon[0]]}const pathSegments=path.split(/(?:::\s*)|(?:\s+(?:::\s*)?)/).map(x=>x.toLowerCase());if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}const bindingName=parserState.isInBinding;parserState.isInBinding=null;const bindings=new Map();const pathLast=pathSegments[pathSegments.length-1];return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast,normalizedPathLast:pathLast.replace(/_/g,""),generics:generics.filter(gen=>{if(gen.bindingName!==null){if(gen.name!==null){gen.bindingName.generics.unshift(gen)}bindings.set(gen.bindingName.name.toLowerCase().replace(/_/g,""),gen.bindingName.generics,);return false}return true}),bindings,typeFilter,bindingName,}}function makePrimitiveElement(name,extra){return Object.assign({name,id:null,fullPath:[name],pathWithoutLast:[],pathLast:name,normalizedPathLast:name,generics:[],bindings:new Map(),typeFilter:"primitive",bindingName:null,},extra)}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function getIdentEndPosition(parserState){let afterIdent=consumeIdent(parserState);let end=parserState.pos;let macroExclamation=-1;while(parserState.pos0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]," (not a valid identifier)"]}else{throw["Unexpected ",c," (not a valid identifier)"]}parserState.pos+=1;afterIdent=consumeIdent(parserState);end=parserState.pos}if(macroExclamation!==-1){if(parserState.typeFilter===null){parserState.typeFilter="macro"}else if(parserState.typeFilter!=="macro"){throw["Invalid search type: macro ","!"," and ",parserState.typeFilter," both specified",]}end=macroExclamation}return end}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function consumeIdent(parserState){REGEX_IDENT.lastIndex=parserState.pos;const match=parserState.userQuery.match(REGEX_IDENT);if(match){parserState.pos+=match[0].length;return true}return false}function isPathSeparator(c){return c===":"||c===" "}class VlqHexDecoder{constructor(string,cons){this.string=string;this.cons=cons;this.offset=0;this.backrefQueue=[]}decodeList(){let c=this.string.charCodeAt(this.offset);const ret=[];while(c!==125){ret.push(this.decode());c=this.string.charCodeAt(this.offset)}this.offset+=1;return ret}decode(){let n=0;let c=this.string.charCodeAt(this.offset);if(c===123){this.offset+=1;return this.decodeList()}while(c<96){n=(n<<4)|(c&0xF);this.offset+=1;c=this.string.charCodeAt(this.offset)}n=(n<<4)|(c&0xF);const[sign,value]=[n&1,n>>1];this.offset+=1;return sign?-value:value}next(){const c=this.string.charCodeAt(this.offset);if(c>=48&&c<64){this.offset+=1;return this.backrefQueue[c-48]}if(c===96){this.offset+=1;return this.cons(0)}const result=this.cons(this.decode());this.backrefQueue.unshift(result);if(this.backrefQueue.length>16){this.backrefQueue.pop()}return result}}class RoaringBitmap{constructor(str){const strdecoded=atob(str);const u8array=new Uint8Array(strdecoded.length);for(let j=0;j=4){offsets=[];for(let j=0;j>3]&(1<<(j&0x7))){const runcount=(u8array[i]|(u8array[i+1]<<8));i+=2;this.containers.push(new RoaringBitmapRun(runcount,u8array.slice(i,i+(runcount*4)),));i+=runcount*4}else if(this.cardinalities[j]>=4096){this.containers.push(new RoaringBitmapBits(u8array.slice(i,i+8192)));i+=8192}else{const end=this.cardinalities[j]*2;this.containers.push(new RoaringBitmapArray(this.cardinalities[j],u8array.slice(i,i+end),));i+=end}}}contains(keyvalue){const key=keyvalue>>16;const value=keyvalue&0xFFFF;let left=0;let right=this.keys.length-1;while(left<=right){const mid=Math.floor((left+right)/2);const x=this.keys[mid];if(xkey){right=mid-1}else{return this.containers[mid].contains(value)}}return false}}class RoaringBitmapRun{constructor(runcount,array){this.runcount=runcount;this.array=array}contains(value){let left=0;let right=this.runcount-1;while(left<=right){const mid=Math.floor((left+right)/2);const i=mid*4;const start=this.array[i]|(this.array[i+1]<<8);const lenm1=this.array[i+2]|(this.array[i+3]<<8);if((start+lenm1)value){right=mid-1}else{return true}}return false}}class RoaringBitmapArray{constructor(cardinality,array){this.cardinality=cardinality;this.array=array}contains(value){let left=0;let right=this.cardinality-1;while(left<=right){const mid=Math.floor((left+right)/2);const i=mid*2;const x=this.array[i]|(this.array[i+1]<<8);if(xvalue){right=mid-1}else{return true}}return false}}class RoaringBitmapBits{constructor(array){this.array=array}contains(value){return!!(this.array[value>>3]&(1<<(value&7)))}}class NameTrie{constructor(){this.children=[];this.matches=[]}insert(name,id,tailTable){this.insertSubstring(name,0,id,tailTable)}insertSubstring(name,substart,id,tailTable){const l=name.length;if(substart===l){this.matches.push(id)}else{const sb=name.charCodeAt(substart);let child;if(this.children[sb]!==undefined){child=this.children[sb]}else{child=new NameTrie();this.children[sb]=child;let sste;if(substart>=2){const tail=name.substring(substart-2,substart+1);if(tailTable.has(tail)){sste=tailTable.get(tail)}else{sste=[];tailTable.set(tail,sste)}sste.push(child)}}child.insertSubstring(name,substart+1,id,tailTable)}}search(name,tailTable){const results=new Set();this.searchSubstringPrefix(name,0,results);if(results.size=3){const levParams=name.length>=6?new Lev2TParametricDescription(name.length):new Lev1TParametricDescription(name.length);this.searchLev(name,0,levParams,results);const tail=name.substring(0,3);if(tailTable.has(tail)){for(const entry of tailTable.get(tail)){entry.searchSubstringPrefix(name,3,results)}}}return[...results]}searchSubstringPrefix(name,substart,results){const l=name.length;if(substart===l){for(const match of this.matches){results.add(match)}let unprocessedChildren=[];for(const child of this.children){if(child){unprocessedChildren.push(child)}}let nextSet=[];while(unprocessedChildren.length!==0){const next=unprocessedChildren.pop();for(const child of next.children){if(child){nextSet.push(child)}}for(const match of next.matches){results.add(match)}if(unprocessedChildren.length===0){const tmp=unprocessedChildren;unprocessedChildren=nextSet;nextSet=tmp}}}else{const sb=name.charCodeAt(substart);if(this.children[sb]!==undefined){this.children[sb].searchSubstringPrefix(name,substart+1,results)}}}searchLev(name,substart,levParams,results){const stack=[[this,0]];const n=levParams.n;while(stack.length!==0){const[trie,levState]=stack.pop();for(const[charCode,child]of trie.children.entries()){if(!child){continue}const levPos=levParams.getPosition(levState);const vector=levParams.getVector(name,charCode,levPos,Math.min(name.length,levPos+(2*n)+1),);const newLevState=levParams.transition(levState,levPos,vector,);if(newLevState>=0){stack.push([child,newLevState]);if(levParams.isAccept(newLevState)){for(const match of child.matches){results.add(match)}}}}}}}class DocSearch{constructor(rawSearchIndex,rootPath,searchState){this.searchIndexDeprecated=new Map();this.searchIndexEmptyDesc=new Map();this.functionTypeFingerprint=null;this.typeNameIdMap=new Map();this.assocTypeIdNameMap=new Map();this.ALIASES=new Map();this.rootPath=rootPath;this.searchState=searchState;this.typeNameIdOfArray=this.buildTypeMapIndex("array");this.typeNameIdOfSlice=this.buildTypeMapIndex("slice");this.typeNameIdOfArrayOrSlice=this.buildTypeMapIndex("[]");this.typeNameIdOfTuple=this.buildTypeMapIndex("tuple");this.typeNameIdOfUnit=this.buildTypeMapIndex("unit");this.typeNameIdOfTupleOrUnit=this.buildTypeMapIndex("()");this.typeNameIdOfFn=this.buildTypeMapIndex("fn");this.typeNameIdOfFnMut=this.buildTypeMapIndex("fnmut");this.typeNameIdOfFnOnce=this.buildTypeMapIndex("fnonce");this.typeNameIdOfHof=this.buildTypeMapIndex("->");this.typeNameIdOfOutput=this.buildTypeMapIndex("output",true);this.typeNameIdOfReference=this.buildTypeMapIndex("reference");this.EMPTY_BINDINGS_MAP=new Map();this.EMPTY_GENERICS_ARRAY=[];this.TYPES_POOL=new Map();this.nameTrie=new NameTrie();this.tailTable=new Map();this.searchIndex=this.buildIndex(rawSearchIndex)}buildTypeMapIndex(name,isAssocType){if(name===""||name===null){return null}if(this.typeNameIdMap.has(name)){const obj=this.typeNameIdMap.get(name);obj.assocOnly=isAssocType&&obj.assocOnly;return obj.id}else{const id=this.typeNameIdMap.size;this.typeNameIdMap.set(name,{id,assocOnly:isAssocType});return id}}buildItemSearchTypeAll(types,paths,lowercasePaths){return types.length>0?types.map(type=>this.buildItemSearchType(type,paths,lowercasePaths)):this.EMPTY_GENERICS_ARRAY}buildItemSearchType(type,paths,lowercasePaths,isAssocType){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;const BINDINGS_DATA=2;let pathIndex,generics,bindings;if(typeof type==="number"){pathIndex=type;generics=this.EMPTY_GENERICS_ARRAY;bindings=this.EMPTY_BINDINGS_MAP}else{pathIndex=type[PATH_INDEX_DATA];generics=this.buildItemSearchTypeAll(type[GENERICS_DATA],paths,lowercasePaths,);if(type.length>BINDINGS_DATA&&type[BINDINGS_DATA].length>0){bindings=new Map(type[BINDINGS_DATA].map(binding=>{const[assocType,constraints]=binding;return[this.buildItemSearchType(assocType,paths,lowercasePaths,true).id,this.buildItemSearchTypeAll(constraints,paths,lowercasePaths),]}))}else{bindings=this.EMPTY_BINDINGS_MAP}}let result;if(pathIndex<0){result={id:pathIndex,name:"",ty:TY_GENERIC,path:null,exactPath:null,generics,bindings,unboxFlag:true,}}else if(pathIndex===0){result={id:null,name:"",ty:null,path:null,exactPath:null,generics,bindings,unboxFlag:true,}}else{const item=lowercasePaths[pathIndex-1];const id=this.buildTypeMapIndex(item.name,isAssocType);if(isAssocType){this.assocTypeIdNameMap.set(id,paths[pathIndex-1].name)}result={id,name:paths[pathIndex-1].name,ty:item.ty,path:item.path,exactPath:item.exactPath,generics,bindings,unboxFlag:item.unboxFlag,}}const cr=this.TYPES_POOL.get(result.id);if(cr){if(cr.generics.length===result.generics.length&&cr.generics!==result.generics&&cr.generics.every((x,i)=>result.generics[i]===x)){result.generics=cr.generics}if(cr.bindings.size===result.bindings.size&&cr.bindings!==result.bindings){let ok=true;for(const[k,v]of cr.bindings.entries()){const v2=result.bindings.get(v);if(!v2){ok=false;break}if(v!==v2&&v.length===v2.length&&v.every((x,i)=>v2[i]===x)){result.bindings.set(k,v)}else if(v!==v2){ok=false;break}}if(ok){result.bindings=cr.bindings}}if(cr.ty===result.ty&&cr.path===result.path&&cr.bindings===result.bindings&&cr.generics===result.generics&&cr.ty===result.ty&&cr.name===result.name&&cr.unboxFlag===result.unboxFlag){return cr}}this.TYPES_POOL.set(result.id,result);return result}buildFunctionTypeFingerprint(type,output){let input=type.id;if(input===this.typeNameIdOfArray||input===this.typeNameIdOfSlice){input=this.typeNameIdOfArrayOrSlice}if(input===this.typeNameIdOfTuple||input===this.typeNameIdOfUnit){input=this.typeNameIdOfTupleOrUnit}if(input===this.typeNameIdOfFn||input===this.typeNameIdOfFnMut||input===this.typeNameIdOfFnOnce){input=this.typeNameIdOfHof}const hashint1=k=>{k=(~~k+0x7ed55d16)+(k<<12);k=(k ^ 0xc761c23c)^(k>>>19);k=(~~k+0x165667b1)+(k<<5);k=(~~k+0xd3a2646c)^(k<<9);k=(~~k+0xfd7046c5)+(k<<3);return(k ^ 0xb55a4f09)^(k>>>16)};const hashint2=k=>{k=~k+(k<<15);k ^=k>>>12;k+=k<<2;k ^=k>>>4;k=Math.imul(k,2057);return k ^(k>>16)};if(input!==null){const h0a=hashint1(input);const h0b=hashint2(input);const h1a=~~(h0a+Math.imul(h0b,2));const h1b=~~(h0a+Math.imul(h0b,3));const h2a=~~(h0a+Math.imul(h0b,4));const h2b=~~(h0a+Math.imul(h0b,5));output[0]|=(1<<(h0a%32))|(1<<(h1b%32));output[1]|=(1<<(h1a%32))|(1<<(h2b%32));output[2]|=(1<<(h2a%32))|(1<<(h0b%32));output[3]+=1}for(const g of type.generics){this.buildFunctionTypeFingerprint(g,output)}const fb={id:null,ty:0,generics:this.EMPTY_GENERICS_ARRAY,bindings:this.EMPTY_BINDINGS_MAP,};for(const[k,v]of type.bindings.entries()){fb.id=k;fb.generics=v;this.buildFunctionTypeFingerprint(fb,output)}}buildIndex(rawSearchIndex){const buildFunctionSearchTypeCallback=(paths,lowercasePaths)=>{return functionSearchType=>{if(functionSearchType===0){return null}const INPUTS_DATA=0;const OUTPUT_DATA=1;let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[this.buildItemSearchType(functionSearchType[INPUTS_DATA],paths,lowercasePaths,),]}else{inputs=this.buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],paths,lowercasePaths,)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[this.buildItemSearchType(functionSearchType[OUTPUT_DATA],paths,lowercasePaths,),]}else{output=this.buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],paths,lowercasePaths,)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;inoop);let descShard={crate,shard:0,start:0,len:itemDescShardDecoder.next(),promise:null,resolve:null,};const descShardList=[descShard];this.searchIndexDeprecated.set(crate,new RoaringBitmap(crateCorpus.c));this.searchIndexEmptyDesc.set(crate,new RoaringBitmap(crateCorpus.e));let descIndex=0;let lastParamNames=[];let normalizedName=crate.indexOf("_")===-1?crate:crate.replace(/_/g,"");const crateRow={crate,ty:3,name:crate,path:"",descShard,descIndex,exactPath:"",desc:crateCorpus.doc,parent:undefined,type:null,paramNames:lastParamNames,id,word:crate,normalizedName,bitIndex:0,implDisambiguator:null,};this.nameTrie.insert(normalizedName,id,this.tailTable);id+=1;searchIndex.push(crateRow);currentIndex+=1;if(!this.searchIndexEmptyDesc.get(crate).contains(0)){descIndex+=1}const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemReexports=new Map(crateCorpus.r);const itemParentIdxDecoder=new VlqHexDecoder(crateCorpus.i,noop=>noop);const implDisambiguator=new Map(crateCorpus.b);const paths=crateCorpus.p;const aliases=crateCorpus.a;const itemParamNames=new Map(crateCorpus.P);const lowercasePaths=[];const itemFunctionDecoder=new VlqHexDecoder(crateCorpus.f,buildFunctionSearchTypeCallback(paths,lowercasePaths),);let len=paths.length;let lastPath=itemPaths.get(0);for(let i=0;i2&&elem[2]!==null){path=itemPaths.has(elem[2])?itemPaths.get(elem[2]):lastPath;lastPath=path}const exactPath=elem.length>3&&elem[3]!==null?itemPaths.get(elem[3]):path;const unboxFlag=elem.length>4&&!!elem[4];lowercasePaths.push({ty,name:name.toLowerCase(),path,exactPath,unboxFlag});paths[i]={ty,name,path,exactPath,unboxFlag}}lastPath="";len=itemTypes.length;let lastName="";let lastWord="";for(let i=0;i=descShard.len&&!this.searchIndexEmptyDesc.get(crate).contains(bitIndex)){descShard={crate,shard:descShard.shard+1,start:descShard.start+descShard.len,len:itemDescShardDecoder.next(),promise:null,resolve:null,};descIndex=0;descShardList.push(descShard)}const name=itemNames[i]===""?lastName:itemNames[i];const word=itemNames[i]===""?lastWord:itemNames[i].toLowerCase();const path=itemPaths.has(i)?itemPaths.get(i):lastPath;const paramNames=itemParamNames.has(i)?itemParamNames.get(i).split(","):lastParamNames;const type=itemFunctionDecoder.next();if(type!==null){if(type){const fp=this.functionTypeFingerprint.subarray(id*4,(id+1)*4);for(const t of type.inputs){this.buildFunctionTypeFingerprint(t,fp)}for(const t of type.output){this.buildFunctionTypeFingerprint(t,fp)}for(const w of type.where_clause){for(const t of w){this.buildFunctionTypeFingerprint(t,fp)}}}}const itemParentIdx=itemParentIdxDecoder.next();normalizedName=word.indexOf("_")===-1?word:word.replace(/_/g,"");const row={crate,ty:itemTypes.charCodeAt(i)-65,name,path,descShard,descIndex,exactPath:itemReexports.has(i)?itemPaths.get(itemReexports.get(i)):path,parent:itemParentIdx>0?paths[itemParentIdx-1]:undefined,type,paramNames,id,word,normalizedName,bitIndex,implDisambiguator:implDisambiguator.has(i)?implDisambiguator.get(i):null,};this.nameTrie.insert(normalizedName,id,this.tailTable);id+=1;searchIndex.push(row);lastPath=row.path;lastParamNames=row.paramNames;if(!this.searchIndexEmptyDesc.get(crate).contains(bitIndex)){descIndex+=1}lastName=name;lastWord=word}if(aliases){const currentCrateAliases=new Map();this.ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!Object.prototype.hasOwnProperty.call(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=itemTypes.length;this.searchState.descShards.set(crate,descShardList)}this.TYPES_POOL=new Map();return searchIndex}static parseQuery(userQuery){function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}for(const constraints of elem.bindings.values()){for(const constraint of constraints){convertTypeFilterOnElem(constraint)}}}function newParsedQuery(userQuery){return{userQuery,elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,hasReturnArrow:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,typeFingerprint:new Uint32Array(4),}}function parseInput(query,parserState){let foundStopChar=true;while(parserState.pos"){if(isReturnArrow(parserState)){query.hasReturnArrow=true;break}throw["Unexpected ",c," (did you mean ","->","?)"]}else if(parserState.pos>0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]]}throw["Unexpected ",c]}else if(c===" "){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;getFilteredNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}async execQuery(parsedQuery,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}const buildHrefAndPath=item=>{let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;let exactPath=item.exactPath;if(type==="mod"){displayPath=path+"::";href=this.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=this.rootPath+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";exactPath="";href=this.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=this.rootPath+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor=type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;exactPath=`${myparent.exactPath}::${myparent.name}`;if(parentType==="primitive"){displayPath=myparent.name+"::";exactPath=myparent.name}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}if(item.implDisambiguator!==null){anchor=item.implDisambiguator+"/"+anchor}href=this.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html#"+anchor}else{displayPath=item.path+"::";href=this.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href,`${exactPath}::${name}`]};function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}const transformResults=(results,typeInfo)=>{const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const res=buildHrefAndPath(this.searchIndex[result.id]);const obj=Object.assign({dist:result.dist,displayPath:pathSplitter(res[0]),},this.searchIndex[result.id]);obj.fullPath=res[2]+"|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}if(obj.ty===TY_IMPORT&&duplicates.has(res[2])){continue}if(duplicates.has(res[2]+"|"+TY_IMPORT)){continue}duplicates.add(obj.fullPath);duplicates.add(res[2]);if(typeInfo!==null){obj.displayTypeSignature=this.formatDisplayTypeSignature(obj,typeInfo)}obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out};this.formatDisplayTypeSignature=async(obj,typeInfo)=>{let fnInputs=null;let fnOutput=null;let mgens=null;if(typeInfo!=="elems"&&typeInfo!=="returned"){fnInputs=unifyFunctionTypes(obj.type.inputs,parsedQuery.elems,obj.type.where_clause,null,mgensScratch=>{fnOutput=unifyFunctionTypes(obj.type.output,parsedQuery.returned,obj.type.where_clause,mgensScratch,mgensOut=>{mgens=mgensOut;return true},0,);return!!fnOutput},0,)}else{const arr=typeInfo==="elems"?obj.type.inputs:obj.type.output;const highlighted=unifyFunctionTypes(arr,parsedQuery.elems,obj.type.where_clause,null,mgensOut=>{mgens=mgensOut;return true},0,);if(typeInfo==="elems"){fnInputs=highlighted}else{fnOutput=highlighted}}if(!fnInputs){fnInputs=obj.type.inputs}if(!fnOutput){fnOutput=obj.type.output}const mappedNames=new Map();const whereClause=new Map();const fnParamNames=obj.paramNames;const queryParamNames=[];const remapQuery=queryElem=>{if(queryElem.id<0){queryParamNames[-1-queryElem.id]=queryElem.name}if(queryElem.generics.length>0){queryElem.generics.forEach(remapQuery)}if(queryElem.bindings.size>0){[...queryElem.bindings.values()].flat().forEach(remapQuery)}};parsedQuery.elems.forEach(remapQuery);parsedQuery.returned.forEach(remapQuery);const pushText=(fnType,result)=>{if(!!(result.length%2)===!!fnType.highlighted){result.push("")}else if(result.length===0&&!!fnType.highlighted){result.push("");result.push("")}result[result.length-1]+=fnType.name};const writeHof=(fnType,result)=>{const hofOutput=fnType.bindings.get(this.typeNameIdOfOutput)||[];const hofInputs=fnType.generics;pushText(fnType,result);pushText({name:" (",highlighted:false},result);let needsComma=false;for(const fnType of hofInputs){if(needsComma){pushText({name:", ",highlighted:false},result)}needsComma=true;writeFn(fnType,result)}pushText({name:hofOutput.length===0?")":") -> ",highlighted:false,},result);if(hofOutput.length>1){pushText({name:"(",highlighted:false},result)}needsComma=false;for(const fnType of hofOutput){if(needsComma){pushText({name:", ",highlighted:false},result)}needsComma=true;writeFn(fnType,result)}if(hofOutput.length>1){pushText({name:")",highlighted:false},result)}};const writeSpecialPrimitive=(fnType,result)=>{if(fnType.id===this.typeNameIdOfArray||fnType.id===this.typeNameIdOfSlice||fnType.id===this.typeNameIdOfTuple||fnType.id===this.typeNameIdOfUnit){const[ob,sb]=fnType.id===this.typeNameIdOfArray||fnType.id===this.typeNameIdOfSlice?["[","]"]:["(",")"];pushText({name:ob,highlighted:fnType.highlighted},result);onEachBtwn(fnType.generics,nested=>writeFn(nested,result),()=>pushText({name:", ",highlighted:false},result),);pushText({name:sb,highlighted:fnType.highlighted},result);return true}else if(fnType.id===this.typeNameIdOfReference){pushText({name:"&",highlighted:fnType.highlighted},result);let prevHighlighted=false;onEachBtwn(fnType.generics,value=>{prevHighlighted=value.highlighted;writeFn(value,result)},value=>pushText({name:" ",highlighted:prevHighlighted&&value.highlighted,},result),);return true}else if(fnType.id===this.typeNameIdOfFn){writeHof(fnType,result);return true}return false};const writeFn=(fnType,result)=>{if(fnType.id<0){if(fnParamNames[-1-fnType.id]===""){const generics=fnType.generics.length>0?fnType.generics:obj.type.where_clause[-1-fnType.id];for(const nested of generics){writeFn(nested,result)}return}else if(mgens){for(const[queryId,fnId]of mgens){if(fnId===fnType.id){mappedNames.set(queryParamNames[-1-queryId],fnParamNames[-1-fnType.id],)}}}pushText({name:fnParamNames[-1-fnType.id],highlighted:!!fnType.highlighted,},result);const where=[];onEachBtwn(fnType.generics,nested=>writeFn(nested,where),()=>pushText({name:" + ",highlighted:false},where),);if(where.length>0){whereClause.set(fnParamNames[-1-fnType.id],where)}}else{if(fnType.ty===TY_PRIMITIVE){if(writeSpecialPrimitive(fnType,result)){return}}else if(fnType.ty===TY_TRAIT&&(fnType.id===this.typeNameIdOfFn||fnType.id===this.typeNameIdOfFnMut||fnType.id===this.typeNameIdOfFnOnce)){writeHof(fnType,result);return}pushText(fnType,result);let hasBindings=false;if(fnType.bindings.size>0){onEachBtwn(fnType.bindings,([key,values])=>{const name=this.assocTypeIdNameMap.get(key);if(values.length===1&&values[0].id<0&&`${fnType.name}::${name}`===fnParamNames[-1-values[0].id]){for(const value of values){writeFn(value,[])}return true}if(!hasBindings){hasBindings=true;pushText({name:"<",highlighted:false},result)}pushText({name,highlighted:false},result);pushText({name:values.length!==1?"=(":"=",highlighted:false,},result);onEachBtwn(values||[],value=>writeFn(value,result),()=>pushText({name:" + ",highlighted:false},result),);if(values.length!==1){pushText({name:")",highlighted:false},result)}},()=>pushText({name:", ",highlighted:false},result),)}if(fnType.generics.length>0){pushText({name:hasBindings?", ":"<",highlighted:false},result)}onEachBtwn(fnType.generics,value=>writeFn(value,result),()=>pushText({name:", ",highlighted:false},result),);if(hasBindings||fnType.generics.length>0){pushText({name:">",highlighted:false},result)}}};const type=[];onEachBtwn(fnInputs,fnType=>writeFn(fnType,type),()=>pushText({name:", ",highlighted:false},type),);pushText({name:" -> ",highlighted:false},type);onEachBtwn(fnOutput,fnType=>writeFn(fnType,type),()=>pushText({name:", ",highlighted:false},type),);return{type,mappedNames,whereClause}};const sortResults=async(results,typeInfo,preferredCrate)=>{const userQuery=parsedQuery.userQuery;const normalizedUserQuery=parsedQuery.userQuery.toLowerCase();const isMixedCase=normalizedUserQuery!==userQuery;const result_list=[];for(const result of results.values()){result.item=this.searchIndex[result.id];result.word=this.searchIndex[result.id].word;result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;if(isMixedCase){a=(aaa.item.name!==userQuery);b=(bbb.item.name!==userQuery);if(a!==b){return a-b}}a=(aaa.word!==normalizedUserQuery);b=(bbb.word!==normalizedUserQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=this.searchIndexDeprecated.get(aaa.item.crate).contains(aaa.item.bitIndex);b=this.searchIndexDeprecated.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=this.searchIndexEmptyDesc.get(aaa.item.crate).contains(aaa.item.bitIndex);b=this.searchIndexEmptyDesc.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});return transformResults(result_list,typeInfo)};function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return null}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return solutionCb(mgens)?fnTypesIn:null}if(!fnTypesIn||fnTypesIn.length===0){return null}const ql=queryElems.length;const fl=fnTypesIn.length;if(ql===1&&queryElems[0].generics.length===0&&queryElems[0].bindings.size===0){const queryElem=queryElems[0];for(const[i,fnType]of fnTypesIn.entries()){if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}if(fnType.id<0&&queryElem.id<0){if(mgens&&mgens.has(queryElem.id)&&mgens.get(queryElem.id)!==fnType.id){continue}const mgensScratch=new Map(mgens);mgensScratch.set(queryElem.id,fnType.id);if(!solutionCb||solutionCb(mgensScratch)){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:whereClause[-1-fnType.id],});return highlighted}}else if(solutionCb(mgens?new Map(mgens):null)){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:unifyGenericTypes(fnType.generics,queryElem.generics,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth,)||fnType.generics,});return highlighted}}for(const[i,fnType]of fnTypesIn.entries()){if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}if(fnType.id<0){const highlightedGenerics=unifyFunctionTypes(whereClause[(-fnType.id)-1],queryElems,whereClause,mgens,solutionCb,unboxingDepth+1,);if(highlightedGenerics){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:highlightedGenerics,});return highlighted}}else{const highlightedGenerics=unifyFunctionTypes([...Array.from(fnType.bindings.values()).flat(),...fnType.generics],queryElems,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth+1,);if(highlightedGenerics){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),});return highlighted}}}return false}const fnTypes=fnTypesIn.slice();const flast=fl-1;const qlast=ql-1;const queryElem=queryElems[qlast];let queryElemsTmp=null;for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}let mgensScratch;if(fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(queryElem.id)&&mgensScratch.get(queryElem.id)!==fnType.id){continue}mgensScratch.set(queryElem.id,fnType.id)}else{mgensScratch=mgens}fnTypes[i]=fnTypes[flast];fnTypes.length=flast;if(!queryElemsTmp){queryElemsTmp=queryElems.slice(0,qlast)}let unifiedGenerics=[];let unifiedGenericsMgens=null;const passesUnification=unifyFunctionTypes(fnTypes,queryElemsTmp,whereClause,mgensScratch,mgensScratch=>{if(fnType.generics.length===0&&queryElem.generics.length===0&&fnType.bindings.size===0&&queryElem.bindings.size===0){return solutionCb(mgensScratch)}const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){unifiedGenerics=unifyGenericTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,);if(unifiedGenerics!==null){unifiedGenericsMgens=simplifiedMgens;return true}}return false},unboxingDepth,);if(passesUnification){passesUnification.length=fl;passesUnification[flast]=passesUnification[i];passesUnification[i]=Object.assign({},fnType,{highlighted:true,generics:unifiedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,queryElem.bindings.has(k)?unifyFunctionTypes(v,queryElem.bindings.get(k),whereClause,unifiedGenericsMgens,solutionCb,unboxingDepth,):unifiedGenerics.splice(0,v.length)]})),});return passesUnification}fnTypes[flast]=fnTypes[i];fnTypes[i]=fnType;fnTypes.length=fl}for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}const generics=fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;const bindings=fnType.bindings?Array.from(fnType.bindings.values()).flat():[];const passesUnification=unifyFunctionTypes(fnTypes.toSpliced(i,1,...bindings,...generics),queryElems,whereClause,mgens,solutionCb,unboxingDepth+1,);if(passesUnification){const highlightedGenerics=passesUnification.slice(i,i+generics.length+bindings.length,);const highlightedFnType=Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),});return passesUnification.toSpliced(i,generics.length+bindings.length,highlightedFnType,)}}return null}function unifyGenericTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return null}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return solutionCb(mgens)?fnTypesIn:null}if(!fnTypesIn||fnTypesIn.length===0){return null}const fnType=fnTypesIn[0];const queryElem=queryElems[0];if(unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){if(fnType.id<0&&queryElem.id<0){if(!mgens||!mgens.has(queryElem.id)||mgens.get(queryElem.id)===fnType.id){const mgensScratch=new Map(mgens);mgensScratch.set(queryElem.id,fnType.id);const fnTypesRemaining=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(fnTypesRemaining){const highlighted=[fnType,...fnTypesRemaining];highlighted[0]=Object.assign({highlighted:true,},fnType,{generics:whereClause[-1-fnType.id],});return highlighted}}}else{let unifiedGenerics;const fnTypesRemaining=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgens,mgensScratch=>{const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){unifiedGenerics=unifyGenericTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,);if(unifiedGenerics!==null){return true}}},unboxingDepth,);if(fnTypesRemaining){const highlighted=[fnType,...fnTypesRemaining];highlighted[0]=Object.assign({highlighted:true,},fnType,{generics:unifiedGenerics||fnType.generics,});return highlighted}}}if(unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){let highlightedRemaining;if(fnType.id<0){const highlightedGenerics=unifyFunctionTypes(whereClause[(-fnType.id)-1],[queryElem],whereClause,mgens,mgensScratch=>{const hl=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(hl){highlightedRemaining=hl}return hl},unboxingDepth+1,);if(highlightedGenerics){return[Object.assign({highlighted:true,},fnType,{generics:highlightedGenerics,}),...highlightedRemaining]}}else{const highlightedGenerics=unifyGenericTypes([...Array.from(fnType.bindings.values()).flat(),...fnType.generics,],[queryElem],whereClause,mgens,mgensScratch=>{const hl=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(hl){highlightedRemaining=hl}return hl},unboxingDepth+1,);if(highlightedGenerics){return[Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),}),...highlightedRemaining]}}}return null}const unifyFunctionTypeIsMatchCandidate=(fnType,queryElem,mgensIn)=>{if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id<0&&queryElem.id<0){if(mgensIn&&mgensIn.has(queryElem.id)&&mgensIn.get(queryElem.id)!==fnType.id){return false}return true}else{if(queryElem.id===this.typeNameIdOfArrayOrSlice&&(fnType.id===this.typeNameIdOfSlice||fnType.id===this.typeNameIdOfArray)){}else if(queryElem.id===this.typeNameIdOfTupleOrUnit&&(fnType.id===this.typeNameIdOfTuple||fnType.id===this.typeNameIdOfUnit)){}else if(queryElem.id===this.typeNameIdOfHof&&(fnType.id===this.typeNameIdOfFn||fnType.id===this.typeNameIdOfFnMut||fnType.id===this.typeNameIdOfFnOnce)){}else if(fnType.id!==queryElem.id||queryElem.id===null){return false}if((fnType.generics.length+fnType.bindings.size)===0&&queryElem.generics.length!==0){return false}if(fnType.bindings.size0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i0){let mgensSolutionSet=[mgensIn];for(const[name,constraints]of queryElem.bindings.entries()){if(mgensSolutionSet.length===0){return false}if(!fnType.bindings.has(name)){return false}const fnTypeBindings=fnType.bindings.get(name);mgensSolutionSet=mgensSolutionSet.flatMap(mgens=>{const newSolutions=[];unifyFunctionTypes(fnTypeBindings,constraints,whereClause,mgens,newMgens=>{newSolutions.push(newMgens);return false},unboxingDepth,);return newSolutions})}if(mgensSolutionSet.length===0){return false}const binds=Array.from(fnType.bindings.entries()).flatMap(entry=>{const[name,constraints]=entry;if(queryElem.bindings.has(name)){return[]}else{return constraints}});if(simplifiedGenerics.length>0){simplifiedGenerics=[...binds,...simplifiedGenerics]}else{simplifiedGenerics=binds}return{simplifiedGenerics,mgens:mgensSolutionSet}}return{simplifiedGenerics,mgens:[mgensIn]}}function unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return false}if(fnType.id<0){if(!whereClause){return false}return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause,mgens,unboxingDepth,)}else if(fnType.unboxFlag&&(fnType.generics.length>0||fnType.bindings.size>0)){const simplifiedGenerics=[...fnType.generics,...Array.from(fnType.bindings.values()).flat(),];return checkIfInList(simplifiedGenerics,queryElem,whereClause,mgens,unboxingDepth,)}return false}function checkIfInList(list,elem,whereClause,mgens,unboxingDepth){for(const entry of list){if(checkType(entry,elem,whereClause,mgens,unboxingDepth)){return true}}return false}const checkType=(row,elem,whereClause,mgens,unboxingDepth)=>{if(unboxingDepth>=UNBOXING_LIMIT){return false}if(row.id>0&&elem.id>0&&elem.pathWithoutLast.length===0&&row.generics.length===0&&elem.generics.length===0&&row.bindings.size===0&&elem.bindings.size===0&&elem.id!==this.typeNameIdOfArrayOrSlice&&elem.id!==this.typeNameIdOfHof&&elem.id!==this.typeNameIdOfTupleOrUnit){return row.id===elem.id&&typePassesFilter(elem.typeFilter,row.ty)}else{return unifyFunctionTypes([row],[elem],whereClause,mgens,()=>true,unboxingDepth,)}};const checkTypeMgensForConflict=mgens=>{if(!mgens){return true}const fnTypes=new Set();for(const[_qid,fid]of mgens){if(fnTypes.has(fid)){return false}fnTypes.add(fid)}return true};function checkPath(contains,ty){if(contains.length===0){return 0}const maxPathEditDistance=Math.floor(contains.reduce((acc,next)=>acc+next.length,0)/3,);let ret_dist=maxPathEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;pathiter:for(let i=length-clength;i>=0;i-=1){let dist_total=0;for(let x=0;xmaxPathEditDistance){continue pathiter}dist_total+=dist}}ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}return ret_dist>maxPathEditDistance?null:ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,descShard:item.descShard,descIndex:item.descIndex,exactPath:item.exactPath,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,bitIndex:item.bitIndex,implDisambiguator:item.implDisambiguator,}}const handleAliases=async(ret,query,filterCrates,currentCrate)=>{const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(this.ALIASES.has(filterCrates)&&this.ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=this.ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(this.searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of this.ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(this.searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{return this.searchIndexEmptyDesc.get(alias.crate).contains(alias.bitIndex)?"":this.searchState.loadDesc(alias)};const[crateDescs,descs]=await Promise.all([Promise.all(crateAliases.map(fetchDesc)),Promise.all(aliases.map(fetchDesc)),]);const pushFunc=alias=>{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach((alias,i)=>{alias.desc=descs[i]});aliases.forEach(pushFunc);crateAliases.forEach((alias,i)=>{alias.desc=crateDescs[i]});crateAliases.forEach(pushFunc)};function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){if(dist<=maxEditDistance||index!==-1){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}const tfpDist=compareTypeFingerprints(row.id,parsedQuery.typeFingerprint,);if(tfpDist===null){return}if(results.size>=MAX_RESULTS&&tfpDist>results.max_dist){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems,row.type.where_clause,null,mgens=>{return unifyFunctionTypes(row.type.output,parsedQuery.returned,row.type.where_clause,mgens,checkTypeMgensForConflict,0,)},0,)){return}results.max_dist=Math.max(results.max_dist||0,tfpDist);addIntoResults(results,row.id,pos,0,tfpDist,0,Number.MAX_VALUE)}const compareTypeFingerprints=(fullId,queryFingerprint)=>{const fh0=this.functionTypeFingerprint[fullId*4];const fh1=this.functionTypeFingerprint[(fullId*4)+1];const fh2=this.functionTypeFingerprint[(fullId*4)+2];const[qh0,qh1,qh2]=queryFingerprint;const[in0,in1,in2]=[fh0&qh0,fh1&qh1,fh2&qh2];if((in0 ^ qh0)||(in1 ^ qh1)||(in2 ^ qh2)){return null}return this.functionTypeFingerprint[(fullId*4)+3]};const innerRunQuery=()=>{const queryLen=parsedQuery.elems.reduce((acc,next)=>acc+next.pathLast.length,0)+parsedQuery.returned.reduce((acc,next)=>acc+next.pathLast.length,0);const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();const convertNameToId=(elem,isAssocType)=>{const loweredName=elem.pathLast.toLowerCase();if(this.typeNameIdMap.has(loweredName)&&(isAssocType||!this.typeNameIdMap.get(loweredName).assocOnly)){elem.id=this.typeNameIdMap.get(loweredName).id}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,{id,assocOnly}]of this.typeNameIdMap){const dist=Math.min(editDistance(name,loweredName,maxEditDistance),editDistance(name,elem.normalizedPathLast,maxEditDistance),);if(dist<=matchDist&&dist<=maxEditDistance&&(isAssocType||!assocOnly)){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0&&elem.bindings.size===0)||elem.typeFilter===TY_GENERIC){if(genericSymbols.has(elem.normalizedPathLast)){elem.id=genericSymbols.get(elem.normalizedPathLast)}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.normalizedPathLast,elem.id)}if(elem.typeFilter===-1&&elem.normalizedPathLast.length>=3){const maxPartDistance=Math.floor(elem.normalizedPathLast.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of this.typeNameIdMap.keys()){const dist=editDistance(name,elem.normalizedPathLast,maxPartDistance,);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}elem.bindings=new Map(Array.from(elem.bindings.entries()).map(entry=>{const[name,constraints]=entry;if(!this.typeNameIdMap.has(name)){parsedQuery.error=["Type parameter ",name," does not exist",];return[null,[]]}for(const elem2 of constraints){convertNameToId(elem2)}return[this.typeNameIdMap.get(name).id,constraints]}),)};for(const elem of parsedQuery.elems){convertNameToId(elem);this.buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint)}for(const elem of parsedQuery.returned){convertNameToId(elem);this.buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint)}if(parsedQuery.foundElems===1&&!parsedQuery.hasReturnArrow){const elem=parsedQuery.elems[0];const handleNameSearch=id=>{const row=this.searchIndex[id];if(!typePassesFilter(elem.typeFilter,row.ty)||(filterCrates!==null&&row.crate!==filterCrates)){return}let pathDist=0;if(elem.fullPath.length>1){pathDist=checkPath(elem.pathWithoutLast,row);if(pathDist===null){return}}if(parsedQuery.literalSearch){if(row.word===elem.pathLast){addIntoResults(results_others,row.id,id,0,0,pathDist)}}else{addIntoResults(results_others,row.id,id,row.normalizedName.indexOf(elem.normalizedPathLast),editDistance(row.normalizedName,elem.normalizedPathLast,maxEditDistance,),pathDist,maxEditDistance,)}};if(elem.normalizedPathLast!==""){const last=elem.normalizedPathLast;for(const id of this.nameTrie.search(last,this.tailTable)){handleNameSearch(id)}}const length=this.searchIndex.length;for(let i=0,nSearchIndex=length;i0){const sortQ=(a,b)=>{const ag=a.generics.length===0&&a.bindings.size===0;const bg=b.generics.length===0&&b.bindings.size===0;if(ag!==bg){return ag-bg}const ai=a.id>0;const bi=b.id>0;return ai-bi};parsedQuery.elems.sort(sortQ);parsedQuery.returned.sort(sortQ);for(let i=0,nSearchIndex=this.searchIndex.length;i{const descs=await Promise.all(list.map(result=>{return this.searchIndexEmptyDesc.get(result.crate).contains(result.bitIndex)?"":this.searchState.loadDesc(result)}));for(const[i,result]of list.entries()){result.desc=descs[i]}}));if(parsedQuery.error!==null&&ret.others.length!==0){ret.query.error=null}return ret}}let rawSearchIndex;let docSearch;const longItemTypes=["keyword","primitive type","module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","assoc type","constant","assoc const","union","foreign type","existential type","attribute macro","derive macro","trait alias",];let currentResults;function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&window.searchIndex.has(elem.value)){return elem.value}return null}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}async function addTab(array,query,display){const extraClass=display?" active":"";const output=document.createElement(array.length===0&&query.error===null?"div":"ul",);if(array.length>0){output.className="search-results "+extraClass;const lis=Promise.all(array.map(async item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("span");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
\ -${item.alias} - see \ -
`}resultName.insertAdjacentHTML("beforeend",`
${alias}\ -${item.displayPath}${name}\ -
`);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);if(item.displayTypeSignature){const{type,mappedNames,whereClause}=await item.displayTypeSignature;const displayType=document.createElement("div");type.forEach((value,index)=>{if(index%2!==0){const highlight=document.createElement("strong");highlight.appendChild(document.createTextNode(value));displayType.appendChild(highlight)}else{displayType.appendChild(document.createTextNode(value))}});if(mappedNames.size>0||whereClause.size>0){let addWhereLineFn=()=>{const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode("where"));displayType.appendChild(line);addWhereLineFn=()=>{}};for(const[qname,name]of mappedNames){if(name===qname){continue}addWhereLineFn();const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode(` ${qname} matches `));const lineStrong=document.createElement("strong");lineStrong.appendChild(document.createTextNode(name));line.appendChild(lineStrong);displayType.appendChild(line)}for(const[name,innerType]of whereClause){if(innerType.length<=1){continue}addWhereLineFn();const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode(` ${name}: `));innerType.forEach((value,index)=>{if(index%2!==0){const highlight=document.createElement("strong");highlight.appendChild(document.createTextNode(value));line.appendChild(highlight)}else{line.appendChild(document.createTextNode(value))}});displayType.appendChild(line)}}displayType.className="type-signature";link.appendChild(displayType)}link.appendChild(description);return link}));lis.then(lis=>{for(const li of lis){output.appendChild(li)}})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return output}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}async function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=DocSearch.parseQuery(searchState.input.value)}currentResults=results.query.userQuery;let currentTab=searchState.currentTab;if((currentTab===0&&results.others.length===0)||(currentTab===1&&results.in_args.length===0)||(currentTab===2&&results.returned.length===0)){if(results.others.length!==0){currentTab=0}else if(results.in_args.length){currentTab=1}else if(results.returned.length){currentTab=2}}let crates="";if(rawSearchIndex.size>1){crates="
in 
"+"
"}let output=`
\ -

Results

${crates}
`;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

Query parser error: "${error.join("")}".

`;output+="
"+makeTabHeader(0,"In Names",results.others.length)+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",results.others.length)+makeTabHeader(1,"In Parameters",results.in_args.length)+makeTabHeader(2,"In Return Types",results.returned.length)+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,results.others.length)+"
";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

`}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

"+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

`}const[ret_others,ret_in_args,ret_returned]=await Promise.all([addTab(results.others,results.query,currentTab===0),addTab(results.in_args,results.query,currentTab===1),addTab(results.returned,results.query,currentTab===2),]);const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others);resultsElem.appendChild(ret_in_args);resultsElem.appendChild(ret_returned);search.innerHTML=output;if(searchState.rustdocToolbar){search.querySelector(".main-heading").appendChild(searchState.rustdocToolbar)}const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}async function search(forced){const query=DocSearch.parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="\""+query.userQuery+"\" Search - Rust";updateSearchHistory(buildUrl(query.userQuery,filterCrates));await showResults(await docSearch.execQuery(query,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;e.preventDefault();search()}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(true)}function initSearch(searchIndx){rawSearchIndex=searchIndx;if(typeof window!=="undefined"){docSearch=new DocSearch(rawSearchIndex,ROOT_PATH,searchState);registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}else if(typeof exports!=="undefined"){docSearch=new DocSearch(rawSearchIndex,ROOT_PATH,searchState);exports.docSearch=docSearch;exports.parseQuery=DocSearch.parseQuery}}if(typeof exports!=="undefined"){exports.initSearch=initSearch}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch(new Map())}class ParametricDescription{constructor(w,n,minErrors){this.w=w;this.n=n;this.minErrors=minErrors}isAccept(absState){const state=Math.floor(absState/(this.w+1));const offset=absState%(this.w+1);return this.w-offset+this.minErrors[state]<=this.n}getPosition(absState){return absState%(this.w+1)}getVector(name,charCode,pos,end){let vector=0;for(let i=pos;i>5;const bitStart=bitLoc&31;if(bitStart+bitsPerValue<=32){return((data[dataLoc]>>bitStart)&this.MASKS[bitsPerValue-1])}else{const part=32-bitStart;return ~~(((data[dataLoc]>>bitStart)&this.MASKS[part-1])+((data[1+dataLoc]&this.MASKS[bitsPerValue-part-1])<limit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost,);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1,)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function isEndCharacter(c){return"=,>-])".indexOf(c)!==-1}function isFnLikeTy(ty){return ty===TY_FN||ty===TY_METHOD||ty===TY_TYMETHOD}function isSeparatorCharacter(c){return c===","||c==="="}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function skipWhitespace(parserState){while(parserState.pos0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(c!==" "){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function getFilteredNextElem(query,parserState,elems,isInGenerics){const start=parserState.pos;if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){throw["Expected type filter before ",":"]}getNextElem(query,parserState,elems,isInGenerics);if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}if(elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.normalizedPathLast;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;getNextElem(query,parserState,elems,isInGenerics)}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let foundSeparator=false;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;const oldIsInBinding=parserState.isInBinding;parserState.isInBinding=null;let hofParameters=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===")"){extra="("}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"," after ","="]}hofParameters=[...elems];elems.length=0;parserState.pos+=2;foundStopChar=true;foundSeparator=false;continue}else if(c===" "){parserState.pos+=1;continue}else if(isSeparatorCharacter(c)){parserState.pos+=1;foundStopChar=true;foundSeparator=true;continue}else if(c===":"&&isPathStart(parserState)){throw["Unexpected ","::",": paths cannot start with ","::"]}else if(isEndCharacter(c)){throw["Unexpected ",c," after ",extra]}if(!foundStopChar){let extra=[];if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",",",", ","=",", or ",endChar,...extra,", found ",c,]}throw["Expected ",","," or ","=",...extra,", found ",c,]}const posBefore=parserState.pos;getFilteredNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;if(hofParameters){foundSeparator=false;if([...elems,...hofParameters].some(x=>x.bindingName)||parserState.isInBinding){throw["Unexpected ","="," within ","->"]}const hofElem=makePrimitiveElement("->",{generics:hofParameters,bindings:new Map([["output",[...elems]]]),typeFilter:null,});elems.length=0;elems[0]=hofElem}parserState.typeFilter=oldTypeFilter;parserState.isInBinding=oldIsInBinding;return{foundSeparator}}function getNextElem(query,parserState,elems,isInGenerics){const generics=[];skipWhitespace(parserState);let start=parserState.pos;let end;if("[(".indexOf(parserState.userQuery[parserState.pos])!==-1){let endChar=")";let name="()";let friendlyName="tuple";if(parserState.userQuery[parserState.pos]==="["){endChar="]";name="[]";friendlyName="slice"}parserState.pos+=1;const{foundSeparator}=getItemsBefore(query,parserState,generics,endChar);const typeFilter=parserState.typeFilter;const bindingName=parserState.isInBinding;parserState.typeFilter=null;parserState.isInBinding=null;for(const gen of generics){if(gen.bindingName!==null){throw["Type parameter ","=",` cannot be within ${friendlyName} `,name]}}if(name==="()"&&!foundSeparator&&generics.length===1&&typeFilter===null){elems.push(generics[0])}else if(name==="()"&&generics.length===1&&generics[0].name==="->"){generics[0].typeFilter=typeFilter;elems.push(generics[0])}else{if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive ",name," and ",typeFilter," both specified",]}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}elems.push(makePrimitiveElement(name,{bindingName,generics}))}}else if(parserState.userQuery[parserState.pos]==="&"){if(parserState.typeFilter!==null&&parserState.typeFilter!=="primitive"){throw["Invalid search type: primitive ","&"," and ",parserState.typeFilter," both specified",]}parserState.typeFilter=null;parserState.pos+=1;let c=parserState.userQuery[parserState.pos];while(c===" "&&parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}else if(parserState.pos=end){throw["Found generics without a path"]}if(parserState.isInBinding){throw["Unexpected ","("," after ","="]}parserState.pos+=1;const typeFilter=parserState.typeFilter;parserState.typeFilter=null;getItemsBefore(query,parserState,generics,")");skipWhitespace(parserState);if(isReturnArrow(parserState)){parserState.pos+=2;skipWhitespace(parserState);getFilteredNextElem(query,parserState,generics,isInGenerics);generics[generics.length-1].bindingName=makePrimitiveElement("output")}else{generics.push(makePrimitiveElement(null,{bindingName:makePrimitiveElement("output"),typeFilter:null,}))}parserState.typeFilter=typeFilter}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}if(parserState.userQuery[parserState.pos]==="="){if(parserState.isInBinding){throw["Cannot write ","="," twice in a binding"]}if(!isInGenerics){throw["Type parameter ","="," must be within generics list"]}const name=parserState.userQuery.slice(start,end).trim();if(name==="!"){throw["Type parameter ","="," key cannot be ","!"," never type"]}if(name.includes("!")){throw["Type parameter ","="," key cannot be ","!"," macro"]}if(name.includes("::")){throw["Type parameter ","="," key cannot contain ","::"," path"]}if(name.includes(":")){throw["Type parameter ","="," key cannot contain ",":"," type"]}parserState.isInBinding={name,generics}}else{elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics,),)}}}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();const match=query.match(REGEX_INVALID_TYPE_FILTER);if(match){throw["Unexpected ",match[0]," in type filter (before ",":",")",]}}function createQueryElement(query,parserState,name,generics,isInGenerics){const path=name.trim();if(path.length===0&&generics.length===0){throw["Unexpected ",parserState.userQuery[parserState.pos]]}if(query.literalSearch&&parserState.totalElems-parserState.genericsElems>0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name.trim()==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}const bindingName=parserState.isInBinding;parserState.isInBinding=null;return makePrimitiveElement("never",{bindingName})}const quadcolon=/::\s*::/.exec(path);if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(quadcolon!==null){throw["Unexpected ",quadcolon[0]]}const pathSegments=path.split(/(?:::\s*)|(?:\s+(?:::\s*)?)/).map(x=>x.toLowerCase());if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}const bindingName=parserState.isInBinding;parserState.isInBinding=null;const bindings=new Map();const pathLast=pathSegments[pathSegments.length-1];return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast,normalizedPathLast:pathLast.replace(/_/g,""),generics:generics.filter(gen=>{if(gen.bindingName!==null&&gen.bindingName.name!==null){if(gen.name!==null){gen.bindingName.generics.unshift(gen)}bindings.set(gen.bindingName.name.toLowerCase().replace(/_/g,""),gen.bindingName.generics,);return false}return true}),bindings,typeFilter,bindingName,}}function makePrimitiveElement(name,extra){return Object.assign({name:name,id:null,fullPath:[name],pathWithoutLast:[],pathLast:name,normalizedPathLast:name,generics:[],bindings:new Map(),typeFilter:"primitive",bindingName:null,},extra)}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function getIdentEndPosition(parserState){let afterIdent=consumeIdent(parserState);let end=parserState.pos;let macroExclamation=-1;while(parserState.pos0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]," (not a valid identifier)"]}else{throw["Unexpected ",c," (not a valid identifier)"]}parserState.pos+=1;afterIdent=consumeIdent(parserState);end=parserState.pos}if(macroExclamation!==-1){if(parserState.typeFilter===null){parserState.typeFilter="macro"}else if(parserState.typeFilter!=="macro"){throw["Invalid search type: macro ","!"," and ",parserState.typeFilter," both specified",]}end=macroExclamation}return end}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function consumeIdent(parserState){REGEX_IDENT.lastIndex=parserState.pos;const match=parserState.userQuery.match(REGEX_IDENT);if(match){parserState.pos+=match[0].length;return true}return false}function isPathSeparator(c){return c===":"||c===" "}class VlqHexDecoder{constructor(string,cons){this.string=string;this.cons=cons;this.offset=0;this.backrefQueue=[]}decodeList(){let c=this.string.charCodeAt(this.offset);const ret=[];while(c!==125){ret.push(this.decode());c=this.string.charCodeAt(this.offset)}this.offset+=1;return ret}decode(){let n=0;let c=this.string.charCodeAt(this.offset);if(c===123){this.offset+=1;return this.decodeList()}while(c<96){n=(n<<4)|(c&0xF);this.offset+=1;c=this.string.charCodeAt(this.offset)}n=(n<<4)|(c&0xF);const[sign,value]=[n&1,n>>1];this.offset+=1;return sign?-value:value}next(){const c=this.string.charCodeAt(this.offset);if(c>=48&&c<64){this.offset+=1;return this.backrefQueue[c-48]}if(c===96){this.offset+=1;return this.cons(0)}const result=this.cons(this.decode());this.backrefQueue.unshift(result);if(this.backrefQueue.length>16){this.backrefQueue.pop()}return result}}class RoaringBitmap{constructor(str){const strdecoded=atob(str);const u8array=new Uint8Array(strdecoded.length);for(let j=0;j=4){offsets=[];for(let j=0;j>3]&(1<<(j&0x7))){const runcount=(u8array[i]|(u8array[i+1]<<8));i+=2;this.containers.push(new RoaringBitmapRun(runcount,u8array.slice(i,i+(runcount*4)),));i+=runcount*4}else if(this.cardinalities[j]>=4096){this.containers.push(new RoaringBitmapBits(u8array.slice(i,i+8192)));i+=8192}else{const end=this.cardinalities[j]*2;this.containers.push(new RoaringBitmapArray(this.cardinalities[j],u8array.slice(i,i+end),));i+=end}}}contains(keyvalue){const key=keyvalue>>16;const value=keyvalue&0xFFFF;let left=0;let right=this.keys.length-1;while(left<=right){const mid=Math.floor((left+right)/2);const x=this.keys[mid];if(xkey){right=mid-1}else{return this.containers[mid].contains(value)}}return false}}class RoaringBitmapRun{constructor(runcount,array){this.runcount=runcount;this.array=array}contains(value){let left=0;let right=this.runcount-1;while(left<=right){const mid=Math.floor((left+right)/2);const i=mid*4;const start=this.array[i]|(this.array[i+1]<<8);const lenm1=this.array[i+2]|(this.array[i+3]<<8);if((start+lenm1)value){right=mid-1}else{return true}}return false}}class RoaringBitmapArray{constructor(cardinality,array){this.cardinality=cardinality;this.array=array}contains(value){let left=0;let right=this.cardinality-1;while(left<=right){const mid=Math.floor((left+right)/2);const i=mid*2;const x=this.array[i]|(this.array[i+1]<<8);if(xvalue){right=mid-1}else{return true}}return false}}class RoaringBitmapBits{constructor(array){this.array=array}contains(value){return!!(this.array[value>>3]&(1<<(value&7)))}}class NameTrie{constructor(){this.children=[];this.matches=[]}insert(name,id,tailTable){this.insertSubstring(name,0,id,tailTable)}insertSubstring(name,substart,id,tailTable){const l=name.length;if(substart===l){this.matches.push(id)}else{const sb=name.charCodeAt(substart);let child;if(this.children[sb]!==undefined){child=this.children[sb]}else{child=new NameTrie();this.children[sb]=child;let sste;if(substart>=2){const tail=name.substring(substart-2,substart+1);const entry=tailTable.get(tail);if(entry!==undefined){sste=entry}else{sste=[];tailTable.set(tail,sste)}sste.push(child)}}child.insertSubstring(name,substart+1,id,tailTable)}}search(name,tailTable){const results=new Set();this.searchSubstringPrefix(name,0,results);if(results.size=3){const levParams=name.length>=6?new Lev2TParametricDescription(name.length):new Lev1TParametricDescription(name.length);this.searchLev(name,0,levParams,results);const tail=name.substring(0,3);const list=tailTable.get(tail);if(list!==undefined){for(const entry of list){entry.searchSubstringPrefix(name,3,results)}}}return[...results]}searchSubstringPrefix(name,substart,results){const l=name.length;if(substart===l){for(const match of this.matches){results.add(match)}let unprocessedChildren=[];for(const child of this.children){if(child){unprocessedChildren.push(child)}}let nextSet=[];while(unprocessedChildren.length!==0){const next=unprocessedChildren.pop();for(const child of next.children){if(child){nextSet.push(child)}}for(const match of next.matches){results.add(match)}if(unprocessedChildren.length===0){const tmp=unprocessedChildren;unprocessedChildren=nextSet;nextSet=tmp}}}else{const sb=name.charCodeAt(substart);if(this.children[sb]!==undefined){this.children[sb].searchSubstringPrefix(name,substart+1,results)}}}searchLev(name,substart,levParams,results){const stack=[[this,0]];const n=levParams.n;while(stack.length!==0){const[trie,levState]=stack.pop();for(const[charCode,child]of trie.children.entries()){if(!child){continue}const levPos=levParams.getPosition(levState);const vector=levParams.getVector(name,charCode,levPos,Math.min(name.length,levPos+(2*n)+1),);const newLevState=levParams.transition(levState,levPos,vector,);if(newLevState>=0){stack.push([child,newLevState]);if(levParams.isAccept(newLevState)){for(const match of child.matches){results.add(match)}}}}}}}class DocSearch{constructor(rawSearchIndex,rootPath,searchState){this.searchIndexDeprecated=new Map();this.searchIndexEmptyDesc=new Map();this.functionTypeFingerprint=new Uint32Array(0);this.typeNameIdMap=new Map();this.assocTypeIdNameMap=new Map();this.ALIASES=new Map();this.rootPath=rootPath;this.searchState=searchState;this.typeNameIdOfArray=this.buildTypeMapIndex("array");this.typeNameIdOfSlice=this.buildTypeMapIndex("slice");this.typeNameIdOfArrayOrSlice=this.buildTypeMapIndex("[]");this.typeNameIdOfTuple=this.buildTypeMapIndex("tuple");this.typeNameIdOfUnit=this.buildTypeMapIndex("unit");this.typeNameIdOfTupleOrUnit=this.buildTypeMapIndex("()");this.typeNameIdOfFn=this.buildTypeMapIndex("fn");this.typeNameIdOfFnMut=this.buildTypeMapIndex("fnmut");this.typeNameIdOfFnOnce=this.buildTypeMapIndex("fnonce");this.typeNameIdOfHof=this.buildTypeMapIndex("->");this.typeNameIdOfOutput=this.buildTypeMapIndex("output",true);this.typeNameIdOfReference=this.buildTypeMapIndex("reference");this.EMPTY_BINDINGS_MAP=new Map();this.EMPTY_GENERICS_ARRAY=[];this.TYPES_POOL=new Map();this.nameTrie=new NameTrie();this.tailTable=new Map();this.searchIndex=this.buildIndex(rawSearchIndex)}buildTypeMapIndex(name,isAssocType){if(name===""||name===null){return null}const obj=this.typeNameIdMap.get(name);if(obj!==undefined){obj.assocOnly=!!(isAssocType&&obj.assocOnly);return obj.id}else{const id=this.typeNameIdMap.size;this.typeNameIdMap.set(name,{id,assocOnly:!!isAssocType});return id}}buildItemSearchTypeAll(types,paths,lowercasePaths){return types&&types.length>0?types.map(type=>this.buildItemSearchType(type,paths,lowercasePaths)):this.EMPTY_GENERICS_ARRAY}buildItemSearchType(type,paths,lowercasePaths,isAssocType){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;const BINDINGS_DATA=2;let pathIndex,generics,bindings;if(typeof type==="number"){pathIndex=type;generics=this.EMPTY_GENERICS_ARRAY;bindings=this.EMPTY_BINDINGS_MAP}else{pathIndex=type[PATH_INDEX_DATA];generics=this.buildItemSearchTypeAll(type[GENERICS_DATA],paths,lowercasePaths,);if(type.length>BINDINGS_DATA&&type[BINDINGS_DATA].length>0){bindings=new Map(type[BINDINGS_DATA].map(binding=>{const[assocType,constraints]=binding;return[this.buildItemSearchType(assocType,paths,lowercasePaths,true).id,this.buildItemSearchTypeAll(constraints,paths,lowercasePaths),]}))}else{bindings=this.EMPTY_BINDINGS_MAP}}let result;if(pathIndex<0){result={id:pathIndex,name:"",ty:TY_GENERIC,path:null,exactPath:null,generics,bindings,unboxFlag:true,}}else if(pathIndex===0){result={id:null,name:"",ty:null,path:null,exactPath:null,generics,bindings,unboxFlag:true,}}else{const item=lowercasePaths[pathIndex-1];const id=this.buildTypeMapIndex(item.name,isAssocType);if(isAssocType&&id!==null){this.assocTypeIdNameMap.set(id,paths[pathIndex-1].name)}result={id,name:paths[pathIndex-1].name,ty:item.ty,path:item.path,exactPath:item.exactPath,generics,bindings,unboxFlag:item.unboxFlag,}}const cr=this.TYPES_POOL.get(result.id);if(cr){if(cr.generics.length===result.generics.length&&cr.generics!==result.generics&&cr.generics.every((x,i)=>result.generics[i]===x)){result.generics=cr.generics}if(cr.bindings.size===result.bindings.size&&cr.bindings!==result.bindings){let ok=true;for(const[k,v]of cr.bindings.entries()){const v2=result.bindings.get(v);if(!v2){ok=false;break}if(v!==v2&&v.length===v2.length&&v.every((x,i)=>v2[i]===x)){result.bindings.set(k,v)}else if(v!==v2){ok=false;break}}if(ok){result.bindings=cr.bindings}}if(cr.ty===result.ty&&cr.path===result.path&&cr.bindings===result.bindings&&cr.generics===result.generics&&cr.ty===result.ty&&cr.name===result.name&&cr.unboxFlag===result.unboxFlag){return cr}}this.TYPES_POOL.set(result.id,result);return result}buildFunctionTypeFingerprint(type,output){let input=type.id;if(input===this.typeNameIdOfArray||input===this.typeNameIdOfSlice){input=this.typeNameIdOfArrayOrSlice}if(input===this.typeNameIdOfTuple||input===this.typeNameIdOfUnit){input=this.typeNameIdOfTupleOrUnit}if(input===this.typeNameIdOfFn||input===this.typeNameIdOfFnMut||input===this.typeNameIdOfFnOnce){input=this.typeNameIdOfHof}const hashint1=k=>{k=(~~k+0x7ed55d16)+(k<<12);k=(k ^ 0xc761c23c)^(k>>>19);k=(~~k+0x165667b1)+(k<<5);k=(~~k+0xd3a2646c)^(k<<9);k=(~~k+0xfd7046c5)+(k<<3);return(k ^ 0xb55a4f09)^(k>>>16)};const hashint2=k=>{k=~k+(k<<15);k ^=k>>>12;k+=k<<2;k ^=k>>>4;k=Math.imul(k,2057);return k ^(k>>16)};if(input!==null){const h0a=hashint1(input);const h0b=hashint2(input);const h1a=~~(h0a+Math.imul(h0b,2));const h1b=~~(h0a+Math.imul(h0b,3));const h2a=~~(h0a+Math.imul(h0b,4));const h2b=~~(h0a+Math.imul(h0b,5));output[0]|=(1<<(h0a%32))|(1<<(h1b%32));output[1]|=(1<<(h1a%32))|(1<<(h2b%32));output[2]|=(1<<(h2a%32))|(1<<(h0b%32));output[3]+=1}for(const g of type.generics){this.buildFunctionTypeFingerprint(g,output)}const fb={id:null,ty:0,generics:this.EMPTY_GENERICS_ARRAY,bindings:this.EMPTY_BINDINGS_MAP,};for(const[k,v]of type.bindings.entries()){fb.id=k;fb.generics=v;this.buildFunctionTypeFingerprint(fb,output)}}buildIndex(rawSearchIndex){const buildFunctionSearchTypeCallback=(paths,lowercasePaths)=>{const cb=functionSearchType=>{if(functionSearchType===0){return null}const INPUTS_DATA=0;const OUTPUT_DATA=1;let inputs;let output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[this.buildItemSearchType(functionSearchType[INPUTS_DATA],paths,lowercasePaths,),]}else{inputs=this.buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],paths,lowercasePaths,)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[this.buildItemSearchType(functionSearchType[OUTPUT_DATA],paths,lowercasePaths,),]}else{output=this.buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],paths,lowercasePaths,)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;i{const n=noop;return n});let descShard={crate,shard:0,start:0,len:itemDescShardDecoder.next(),promise:null,resolve:null,};const descShardList=[descShard];this.searchIndexDeprecated.set(crate,new RoaringBitmap(crateCorpus.c));this.searchIndexEmptyDesc.set(crate,new RoaringBitmap(crateCorpus.e));let descIndex=0;let lastParamNames=[];let normalizedName=crate.indexOf("_")===-1?crate:crate.replace(/_/g,"");const crateRow={crate,ty:3,name:crate,path:"",descShard,descIndex,exactPath:"",desc:crateCorpus.doc,parent:undefined,type:null,paramNames:lastParamNames,id,word:crate,normalizedName,bitIndex:0,implDisambiguator:null,};this.nameTrie.insert(normalizedName,id,this.tailTable);id+=1;searchIndex.push(crateRow);currentIndex+=1;if(!this.searchIndexEmptyDesc.get(crate).contains(0)){descIndex+=1}const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemReexports=new Map(crateCorpus.r);const itemParentIdxDecoder=new VlqHexDecoder(crateCorpus.i,noop=>noop);const implDisambiguator=new Map(crateCorpus.b);const rawPaths=crateCorpus.p;const aliases=crateCorpus.a;const itemParamNames=new Map(crateCorpus.P);const lowercasePaths=[];const paths=[];const itemFunctionDecoder=new VlqHexDecoder(crateCorpus.f,buildFunctionSearchTypeCallback(paths,lowercasePaths),);let len=rawPaths.length;let lastPath=undef2null(itemPaths.get(0));for(let i=0;i{if(elem.length>idx&&elem[idx]!==undefined){const p=itemPaths.get(elem[idx]);if(p!==undefined){return p}return if_not_found}return if_null};const path=elemPath(2,lastPath,null);const exactPath=elemPath(3,path,path);const unboxFlag=elem.length>4&&!!elem[4];lowercasePaths.push({ty,name:name.toLowerCase(),path,exactPath,unboxFlag});paths[i]={ty,name,path,exactPath,unboxFlag}}lastPath="";len=itemTypes.length;let lastName="";let lastWord="";for(let i=0;i=descShard.len&&!this.searchIndexEmptyDesc.get(crate).contains(bitIndex)){descShard={crate,shard:descShard.shard+1,start:descShard.start+descShard.len,len:itemDescShardDecoder.next(),promise:null,resolve:null,};descIndex=0;descShardList.push(descShard)}const name=itemNames[i]===""?lastName:itemNames[i];const word=itemNames[i]===""?lastWord:itemNames[i].toLowerCase();const pathU=itemPaths.get(i);const path=pathU!==undefined?pathU:lastPath;const paramNameString=itemParamNames.get(i);const paramNames=paramNameString!==undefined?paramNameString.split(","):lastParamNames;const type=itemFunctionDecoder.next();if(type!==null){if(type){const fp=this.functionTypeFingerprint.subarray(id*4,(id+1)*4);for(const t of type.inputs){this.buildFunctionTypeFingerprint(t,fp)}for(const t of type.output){this.buildFunctionTypeFingerprint(t,fp)}for(const w of type.where_clause){for(const t of w){this.buildFunctionTypeFingerprint(t,fp)}}}}const itemParentIdx=itemParentIdxDecoder.next();normalizedName=word.indexOf("_")===-1?word:word.replace(/_/g,"");const row={crate,ty:itemTypes.charCodeAt(i)-65,name,path,descShard,descIndex,exactPath:itemReexports.has(i)?itemPaths.get(itemReexports.get(i)):path,parent:itemParentIdx>0?paths[itemParentIdx-1]:undefined,type,paramNames,id,word,normalizedName,bitIndex,implDisambiguator:undef2null(implDisambiguator.get(i)),};this.nameTrie.insert(normalizedName,id,this.tailTable);id+=1;searchIndex.push(row);lastPath=row.path;lastParamNames=row.paramNames;if(!this.searchIndexEmptyDesc.get(crate).contains(bitIndex)){descIndex+=1}lastName=name;lastWord=word}if(aliases){const currentCrateAliases=new Map();this.ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!Object.prototype.hasOwnProperty.call(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=itemTypes.length;this.searchState.descShards.set(crate,descShardList)}this.TYPES_POOL=new Map();return searchIndex}static parseQuery(userQuery){function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function convertTypeFilterOnElem(elem){if(typeof elem.typeFilter==="string"){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}for(const constraints of elem.bindings.values()){for(const constraint of constraints){convertTypeFilterOnElem(constraint)}}}function newParsedQuery(userQuery){return{userQuery,elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,hasReturnArrow:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,typeFingerprint:new Uint32Array(4),}}function parseInput(query,parserState){let foundStopChar=true;while(parserState.pos"){if(isReturnArrow(parserState)){query.hasReturnArrow=true;break}throw["Unexpected ",c," (did you mean ","->","?)"]}else if(parserState.pos>0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]]}throw["Unexpected ",c]}else if(c===" "){skipWhitespace(parserState);continue}if(!foundStopChar){let extra=[];if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;getFilteredNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.postypeof elem==="string")){query.error=err}else{throw err}return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}async execQuery(origParsedQuery,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();const parsedQuery=origParsedQuery;const queryLen=parsedQuery.elems.reduce((acc,next)=>acc+next.pathLast.length,0)+parsedQuery.returned.reduce((acc,next)=>acc+next.pathLast.length,0);const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();const convertNameToId=(elem,isAssocType)=>{const loweredName=elem.pathLast.toLowerCase();if(this.typeNameIdMap.has(loweredName)&&(isAssocType||!this.typeNameIdMap.get(loweredName).assocOnly)){elem.id=this.typeNameIdMap.get(loweredName).id}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,{id,assocOnly}]of this.typeNameIdMap){const dist=Math.min(editDistance(name,loweredName,maxEditDistance),editDistance(name,elem.normalizedPathLast,maxEditDistance),);if(dist<=matchDist&&dist<=maxEditDistance&&(isAssocType||!assocOnly)){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0&&elem.bindings.size===0)||elem.typeFilter===TY_GENERIC){const id=genericSymbols.get(elem.normalizedPathLast);if(id!==undefined){elem.id=id}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.normalizedPathLast,elem.id)}if(elem.typeFilter===-1&&elem.normalizedPathLast.length>=3){const maxPartDistance=Math.floor(elem.normalizedPathLast.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of this.typeNameIdMap.keys()){const dist=editDistance(name,elem.normalizedPathLast,maxPartDistance,);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}elem.bindings=new Map(Array.from(elem.bindings.entries()).map(entry=>{const[name,constraints]=entry;if(!this.typeNameIdMap.has(name)){parsedQuery.error=["Type parameter ",name," does not exist",];return[0,[]]}for(const elem2 of constraints){convertNameToId(elem2,false)}return[this.typeNameIdMap.get(name).id,constraints]}),)};for(const elem of parsedQuery.elems){convertNameToId(elem,false);this.buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint)}for(const elem of parsedQuery.returned){convertNameToId(elem,false);this.buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint)}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}const buildHrefAndPath=item=>{let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;let exactPath=item.exactPath;if(type==="mod"){displayPath=path+"::";href=this.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=this.rootPath+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";exactPath="";href=this.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=this.rootPath+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor=type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;exactPath=`${myparent.exactPath}::${myparent.name}`;if(parentType==="primitive"){displayPath=myparent.name+"::";exactPath=myparent.name}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}if(item.implDisambiguator!==null){anchor=item.implDisambiguator+"/"+anchor}href=this.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html#"+anchor}else{displayPath=item.path+"::";href=this.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href,`${exactPath}::${name}`]};function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}const transformResults=(results,typeInfo)=>{const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const res=buildHrefAndPath(this.searchIndex[result.id]);const obj=Object.assign({parent:result.parent,type:result.type,dist:result.dist,path_dist:result.path_dist,index:result.index,desc:result.desc,item:result.item,displayPath:pathSplitter(res[0]),fullPath:"",href:"",displayTypeSignature:null,},this.searchIndex[result.id]);obj.fullPath=res[2]+"|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}if(obj.ty===TY_IMPORT&&duplicates.has(res[2])){continue}if(duplicates.has(res[2]+"|"+TY_IMPORT)){continue}duplicates.add(obj.fullPath);duplicates.add(res[2]);if(typeInfo!==null){obj.displayTypeSignature=this.formatDisplayTypeSignature(obj,typeInfo)}obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out};this.formatDisplayTypeSignature=async(obj,typeInfo)=>{const objType=obj.type;if(!objType){return{type:[],mappedNames:new Map(),whereClause:new Map()}}let fnInputs=null;let fnOutput=null;let mgens=null;if(typeInfo!=="elems"&&typeInfo!=="returned"){fnInputs=unifyFunctionTypes(objType.inputs,parsedQuery.elems,objType.where_clause,null,mgensScratch=>{fnOutput=unifyFunctionTypes(objType.output,parsedQuery.returned,objType.where_clause,mgensScratch,mgensOut=>{mgens=mgensOut;return true},0,);return!!fnOutput},0,)}else{const arr=typeInfo==="elems"?objType.inputs:objType.output;const highlighted=unifyFunctionTypes(arr,parsedQuery.elems,objType.where_clause,null,mgensOut=>{mgens=mgensOut;return true},0,);if(typeInfo==="elems"){fnInputs=highlighted}else{fnOutput=highlighted}}if(!fnInputs){fnInputs=objType.inputs}if(!fnOutput){fnOutput=objType.output}const mappedNames=new Map();const whereClause=new Map();const fnParamNames=obj.paramNames||[];const queryParamNames=[];const remapQuery=queryElem=>{if(queryElem.id!==null&&queryElem.id<0){queryParamNames[-1-queryElem.id]=queryElem.name}if(queryElem.generics.length>0){queryElem.generics.forEach(remapQuery)}if(queryElem.bindings.size>0){[...queryElem.bindings.values()].flat().forEach(remapQuery)}};parsedQuery.elems.forEach(remapQuery);parsedQuery.returned.forEach(remapQuery);const pushText=(fnType,result)=>{if(!!(result.length%2)===!!fnType.highlighted){result.push("")}else if(result.length===0&&!!fnType.highlighted){result.push("");result.push("")}result[result.length-1]+=fnType.name};const writeHof=(fnType,result)=>{const hofOutput=fnType.bindings.get(this.typeNameIdOfOutput)||[];const hofInputs=fnType.generics;pushText(fnType,result);pushText({name:" (",highlighted:false},result);let needsComma=false;for(const fnType of hofInputs){if(needsComma){pushText({name:", ",highlighted:false},result)}needsComma=true;writeFn(fnType,result)}pushText({name:hofOutput.length===0?")":") -> ",highlighted:false,},result);if(hofOutput.length>1){pushText({name:"(",highlighted:false},result)}needsComma=false;for(const fnType of hofOutput){if(needsComma){pushText({name:", ",highlighted:false},result)}needsComma=true;writeFn(fnType,result)}if(hofOutput.length>1){pushText({name:")",highlighted:false},result)}};const writeSpecialPrimitive=(fnType,result)=>{if(fnType.id===this.typeNameIdOfArray||fnType.id===this.typeNameIdOfSlice||fnType.id===this.typeNameIdOfTuple||fnType.id===this.typeNameIdOfUnit){const[ob,sb]=fnType.id===this.typeNameIdOfArray||fnType.id===this.typeNameIdOfSlice?["[","]"]:["(",")"];pushText({name:ob,highlighted:fnType.highlighted},result);onEachBtwn(fnType.generics,nested=>writeFn(nested,result),()=>pushText({name:", ",highlighted:false},result),);pushText({name:sb,highlighted:fnType.highlighted},result);return true}else if(fnType.id===this.typeNameIdOfReference){pushText({name:"&",highlighted:fnType.highlighted},result);let prevHighlighted=false;onEachBtwn(fnType.generics,value=>{prevHighlighted=!!value.highlighted;writeFn(value,result)},value=>pushText({name:" ",highlighted:prevHighlighted&&value.highlighted,},result),);return true}else if(fnType.id===this.typeNameIdOfFn){writeHof(fnType,result);return true}return false};const writeFn=(fnType,result)=>{if(fnType.id!==null&&fnType.id<0){if(fnParamNames[-1-fnType.id]===""){const generics=fnType.generics.length>0?fnType.generics:objType.where_clause[-1-fnType.id];for(const nested of generics){writeFn(nested,result)}return}else if(mgens){for(const[queryId,fnId]of mgens){if(fnId===fnType.id){mappedNames.set(queryParamNames[-1-queryId],fnParamNames[-1-fnType.id],)}}}pushText({name:fnParamNames[-1-fnType.id],highlighted:!!fnType.highlighted,},result);const where=[];onEachBtwn(fnType.generics,nested=>writeFn(nested,where),()=>pushText({name:" + ",highlighted:false},where),);if(where.length>0){whereClause.set(fnParamNames[-1-fnType.id],where)}}else{if(fnType.ty===TY_PRIMITIVE){if(writeSpecialPrimitive(fnType,result)){return}}else if(fnType.ty===TY_TRAIT&&(fnType.id===this.typeNameIdOfFn||fnType.id===this.typeNameIdOfFnMut||fnType.id===this.typeNameIdOfFnOnce)){writeHof(fnType,result);return}pushText(fnType,result);let hasBindings=false;if(fnType.bindings.size>0){onEachBtwn(fnType.bindings,([key,values])=>{const name=this.assocTypeIdNameMap.get(key);if(values.length===1&&values[0].id<0&&`${fnType.name}::${name}`===fnParamNames[-1-values[0].id]){for(const value of values){writeFn(value,[])}return true}if(!hasBindings){hasBindings=true;pushText({name:"<",highlighted:false},result)}pushText({name,highlighted:false},result);pushText({name:values.length!==1?"=(":"=",highlighted:false,},result);onEachBtwn(values||[],value=>writeFn(value,result),()=>pushText({name:" + ",highlighted:false},result),);if(values.length!==1){pushText({name:")",highlighted:false},result)}},()=>pushText({name:", ",highlighted:false},result),)}if(fnType.generics.length>0){pushText({name:hasBindings?", ":"<",highlighted:false},result)}onEachBtwn(fnType.generics,value=>writeFn(value,result),()=>pushText({name:", ",highlighted:false},result),);if(hasBindings||fnType.generics.length>0){pushText({name:">",highlighted:false},result)}}};const type=[];onEachBtwn(fnInputs,fnType=>writeFn(fnType,type),()=>pushText({name:", ",highlighted:false},type),);pushText({name:" -> ",highlighted:false},type);onEachBtwn(fnOutput,fnType=>writeFn(fnType,type),()=>pushText({name:", ",highlighted:false},type),);return{type,mappedNames,whereClause}};const sortResults=async(results,typeInfo,preferredCrate)=>{const userQuery=parsedQuery.userQuery;const normalizedUserQuery=parsedQuery.userQuery.toLowerCase();const isMixedCase=normalizedUserQuery!==userQuery;const result_list=[];const isReturnTypeQuery=parsedQuery.elems.length===0||typeInfo==="returned";for(const result of results.values()){result.item=this.searchIndex[result.id];result.word=this.searchIndex[result.id].word;if(isReturnTypeQuery){const resultItemType=result.item&&result.item.type;if(!resultItemType){continue}const inputs=resultItemType.inputs;const where_clause=resultItemType.where_clause;if(containsTypeFromQuery(inputs,where_clause)){result.path_dist*=100;result.dist*=100}}result_list.push(result)}result_list.sort((aaa,bbb)=>{let a;let b;if(isMixedCase){a=Number(aaa.item.name!==userQuery);b=Number(bbb.item.name!==userQuery);if(a!==b){return a-b}}a=Number(aaa.word!==normalizedUserQuery);b=Number(bbb.word!==normalizedUserQuery);if(a!==b){return a-b}a=Number(aaa.index<0);b=Number(bbb.index<0);if(a!==b){return a-b}if(parsedQuery.hasReturnArrow){a=Number(!isFnLikeTy(aaa.item.ty));b=Number(!isFnLikeTy(bbb.item.ty));if(a!==b){return a-b}}a=Number(aaa.path_dist);b=Number(bbb.path_dist);if(a!==b){return a-b}a=Number(aaa.index);b=Number(bbb.index);if(a!==b){return a-b}a=Number(aaa.dist);b=Number(bbb.dist);if(a!==b){return a-b}a=Number(this.searchIndexDeprecated.get(aaa.item.crate).contains(aaa.item.bitIndex),);b=Number(this.searchIndexDeprecated.get(bbb.item.crate).contains(bbb.item.bitIndex),);if(a!==b){return a-b}a=Number(aaa.item.crate!==preferredCrate);b=Number(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=Number(aaa.word.length);b=Number(bbb.word.length);if(a!==b){return a-b}let aw=aaa.word;let bw=bbb.word;if(aw!==bw){return(aw>bw?+1:-1)}a=Number(this.searchIndexEmptyDesc.get(aaa.item.crate).contains(aaa.item.bitIndex),);b=Number(this.searchIndexEmptyDesc.get(bbb.item.crate).contains(bbb.item.bitIndex),);if(a!==b){return a-b}a=Number(aaa.item.ty);b=Number(bbb.item.ty);if(a!==b){return a-b}aw=aaa.item.path;bw=bbb.item.path;if(aw!==bw){return(aw>bw?+1:-1)}return 0});return transformResults(result_list,typeInfo)};function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return null}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return solutionCb(mgens)?fnTypesIn:null}if(!fnTypesIn||fnTypesIn.length===0){return null}const ql=queryElems.length;const fl=fnTypesIn.length;if(ql===1&&queryElems[0].generics.length===0&&queryElems[0].bindings.size===0){const queryElem=queryElems[0];for(const[i,fnType]of fnTypesIn.entries()){if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}if(fnType.id!==null&&fnType.id<0&&queryElem.id!==null&&queryElem.id<0){if(mgens&&mgens.has(queryElem.id)&&mgens.get(queryElem.id)!==fnType.id){continue}const mgensScratch=new Map(mgens);mgensScratch.set(queryElem.id,fnType.id);if(!solutionCb||solutionCb(mgensScratch)){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:whereClause[-1-fnType.id],});return highlighted}}else if(solutionCb(mgens?new Map(mgens):null)){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:unifyGenericTypes(fnType.generics,queryElem.generics,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth,)||fnType.generics,});return highlighted}}for(const[i,fnType]of fnTypesIn.entries()){if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}if(fnType.id<0){const highlightedGenerics=unifyFunctionTypes(whereClause[(-fnType.id)-1],queryElems,whereClause,mgens,solutionCb,unboxingDepth+1,);if(highlightedGenerics){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:highlightedGenerics,});return highlighted}}else{const highlightedGenerics=unifyFunctionTypes([...Array.from(fnType.bindings.values()).flat(),...fnType.generics],queryElems,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth+1,);if(highlightedGenerics){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),});return highlighted}}}return null}const fnTypes=fnTypesIn.slice();const flast=fl-1;const qlast=ql-1;const queryElem=queryElems[qlast];let queryElemsTmp=null;for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}let mgensScratch;if(fnType.id!==null&&queryElem.id!==null&&fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(queryElem.id)&&mgensScratch.get(queryElem.id)!==fnType.id){continue}mgensScratch.set(queryElem.id,fnType.id)}else{mgensScratch=mgens}fnTypes[i]=fnTypes[flast];fnTypes.length=flast;if(!queryElemsTmp){queryElemsTmp=queryElems.slice(0,qlast)}let unifiedGenerics=[];let unifiedGenericsMgens=null;const passesUnification=unifyFunctionTypes(fnTypes,queryElemsTmp,whereClause,mgensScratch,mgensScratch=>{if(fnType.generics.length===0&&queryElem.generics.length===0&&fnType.bindings.size===0&&queryElem.bindings.size===0){return solutionCb(mgensScratch)}const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){unifiedGenerics=unifyGenericTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,);if(unifiedGenerics!==null){unifiedGenericsMgens=simplifiedMgens;return true}}return false},unboxingDepth,);if(passesUnification){passesUnification.length=fl;passesUnification[flast]=passesUnification[i];passesUnification[i]=Object.assign({},fnType,{highlighted:true,generics:unifiedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,queryElem.bindings.has(k)?unifyFunctionTypes(v,queryElem.bindings.get(k),whereClause,unifiedGenericsMgens,solutionCb,unboxingDepth,):unifiedGenerics.splice(0,v.length)]})),});return passesUnification}fnTypes[flast]=fnTypes[i];fnTypes[i]=fnType;fnTypes.length=fl}for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}const generics=fnType.id!==null&&fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;const bindings=fnType.bindings?Array.from(fnType.bindings.values()).flat():[];const passesUnification=unifyFunctionTypes(fnTypes.toSpliced(i,1,...bindings,...generics),queryElems,whereClause,mgens,solutionCb,unboxingDepth+1,);if(passesUnification){const highlightedGenerics=passesUnification.slice(i,i+generics.length+bindings.length,);const highlightedFnType=Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),});return passesUnification.toSpliced(i,generics.length+bindings.length,highlightedFnType,)}}return null}function unifyGenericTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return null}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return solutionCb(mgens)?fnTypesIn:null}if(!fnTypesIn||fnTypesIn.length===0){return null}const fnType=fnTypesIn[0];const queryElem=queryElems[0];if(unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){if(fnType.id!==null&&fnType.id<0&&queryElem.id!==null&&queryElem.id<0){if(!mgens||!mgens.has(queryElem.id)||mgens.get(queryElem.id)===fnType.id){const mgensScratch=new Map(mgens);mgensScratch.set(queryElem.id,fnType.id);const fnTypesRemaining=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(fnTypesRemaining){const highlighted=[fnType,...fnTypesRemaining];highlighted[0]=Object.assign({highlighted:true,},fnType,{generics:whereClause[-1-fnType.id],});return highlighted}}}else{let unifiedGenerics;const fnTypesRemaining=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgens,mgensScratch=>{const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){unifiedGenerics=unifyGenericTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,);if(unifiedGenerics!==null){return true}}},unboxingDepth,);if(fnTypesRemaining){const highlighted=[fnType,...fnTypesRemaining];highlighted[0]=Object.assign({highlighted:true,},fnType,{generics:unifiedGenerics||fnType.generics,});return highlighted}}}if(unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){let highlightedRemaining;if(fnType.id!==null&&fnType.id<0){const highlightedGenerics=unifyFunctionTypes(whereClause[(-fnType.id)-1],[queryElem],whereClause,mgens,mgensScratch=>{const hl=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(hl){highlightedRemaining=hl}return hl},unboxingDepth+1,);if(highlightedGenerics){return[Object.assign({highlighted:true,},fnType,{generics:highlightedGenerics,}),...highlightedRemaining]}}else{const highlightedGenerics=unifyGenericTypes([...Array.from(fnType.bindings.values()).flat(),...fnType.generics,],[queryElem],whereClause,mgens,mgensScratch=>{const hl=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(hl){highlightedRemaining=hl}return hl},unboxingDepth+1,);if(highlightedGenerics){return[Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),}),...highlightedRemaining]}}}return null}const unifyFunctionTypeIsMatchCandidate=(fnType,queryElem,mgensIn)=>{if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id!==null&&fnType.id<0&&queryElem.id!==null&&queryElem.id<0){if(mgensIn&&mgensIn.has(queryElem.id)&&mgensIn.get(queryElem.id)!==fnType.id){return false}return true}else{if(queryElem.id===this.typeNameIdOfArrayOrSlice&&(fnType.id===this.typeNameIdOfSlice||fnType.id===this.typeNameIdOfArray)){}else if(queryElem.id===this.typeNameIdOfTupleOrUnit&&(fnType.id===this.typeNameIdOfTuple||fnType.id===this.typeNameIdOfUnit)){}else if(queryElem.id===this.typeNameIdOfHof&&(fnType.id===this.typeNameIdOfFn||fnType.id===this.typeNameIdOfFnMut||fnType.id===this.typeNameIdOfFnOnce)){}else if(fnType.id!==queryElem.id||queryElem.id===null){return false}if((fnType.generics.length+fnType.bindings.size)===0&&queryElem.generics.length!==0){return false}if(fnType.bindings.size0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i0){let mgensSolutionSet=[mgensIn];for(const[name,constraints]of queryElem.bindings.entries()){if(mgensSolutionSet.length===0){return false}if(!fnType.bindings.has(name)){return false}const fnTypeBindings=fnType.bindings.get(name);mgensSolutionSet=mgensSolutionSet.flatMap(mgens=>{const newSolutions=[];unifyFunctionTypes(fnTypeBindings,constraints,whereClause,mgens,newMgens=>{newSolutions.push(newMgens);return false},unboxingDepth,);return newSolutions})}if(mgensSolutionSet.length===0){return false}const binds=Array.from(fnType.bindings.entries()).flatMap(entry=>{const[name,constraints]=entry;if(queryElem.bindings.has(name)){return[]}else{return constraints}});if(simplifiedGenerics.length>0){simplifiedGenerics=[...binds,...simplifiedGenerics]}else{simplifiedGenerics=binds}return{simplifiedGenerics,mgens:mgensSolutionSet}}return{simplifiedGenerics,mgens:[mgensIn]}}function unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return false}if(fnType.id!==null&&fnType.id<0){if(!whereClause){return false}return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause,mgens,unboxingDepth,)}else if(fnType.unboxFlag&&(fnType.generics.length>0||fnType.bindings.size>0)){const simplifiedGenerics=[...fnType.generics,...Array.from(fnType.bindings.values()).flat(),];return checkIfInList(simplifiedGenerics,queryElem,whereClause,mgens,unboxingDepth,)}return false}function containsTypeFromQuery(list,where_clause){if(!list)return false;for(const ty of parsedQuery.returned){if(ty.id!==null&&ty.id<0){continue}if(checkIfInList(list,ty,where_clause,null,0)){return true}}for(const ty of parsedQuery.elems){if(ty.id!==null&&ty.id<0){continue}if(checkIfInList(list,ty,where_clause,null,0)){return true}}return false}function checkIfInList(list,elem,whereClause,mgens,unboxingDepth){for(const entry of list){if(checkType(entry,elem,whereClause,mgens,unboxingDepth)){return true}}return false}const checkType=(row,elem,whereClause,mgens,unboxingDepth)=>{if(unboxingDepth>=UNBOXING_LIMIT){return false}if(row.id!==null&&elem.id!==null&&row.id>0&&elem.id>0&&elem.pathWithoutLast.length===0&&row.generics.length===0&&elem.generics.length===0&&row.bindings.size===0&&elem.bindings.size===0&&elem.id!==this.typeNameIdOfArrayOrSlice&&elem.id!==this.typeNameIdOfHof&&elem.id!==this.typeNameIdOfTupleOrUnit){return row.id===elem.id&&typePassesFilter(elem.typeFilter,row.ty)}else{return unifyFunctionTypes([row],[elem],whereClause,mgens,()=>true,unboxingDepth,)}};const checkTypeMgensForConflict=mgens=>{if(!mgens){return true}const fnTypes=new Set();for(const[_qid,fid]of mgens){if(fnTypes.has(fid)){return false}fnTypes.add(fid)}return true};function checkPath(contains,ty){if(contains.length===0){return 0}const maxPathEditDistance=Math.floor(contains.reduce((acc,next)=>acc+next.length,0)/3,);let ret_dist=maxPathEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;pathiter:for(let i=length-clength;i>=0;i-=1){let dist_total=0;for(let x=0;xmaxPathEditDistance){continue pathiter}dist_total+=dist}}ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}return ret_dist>maxPathEditDistance?null:ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,descShard:item.descShard,descIndex:item.descIndex,exactPath:item.exactPath,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,bitIndex:item.bitIndex,implDisambiguator:item.implDisambiguator,}}const handleAliases=async(ret,query,filterCrates,currentCrate)=>{const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(this.ALIASES.has(filterCrates)&&this.ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=this.ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(this.searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of this.ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(this.searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{return this.searchIndexEmptyDesc.get(alias.crate).contains(alias.bitIndex)?"":this.searchState.loadDesc(alias)};const[crateDescs,descs]=await Promise.all([Promise.all(crateAliases.map(fetchDesc)),Promise.all(aliases.map(fetchDesc)),]);const pushFunc=alias=>{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach((alias,i)=>{alias.desc=descs[i]});aliases.forEach(pushFunc);crateAliases.forEach((alias,i)=>{alias.desc=crateDescs[i]});crateAliases.forEach(pushFunc)};function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){if(dist<=maxEditDistance||index!==-1){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}const rowType=row.type;if(!rowType){return}const tfpDist=compareTypeFingerprints(row.id,parsedQuery.typeFingerprint,);if(tfpDist===null){return}if(results.size>=MAX_RESULTS&&tfpDist>results.max_dist){return}if(!unifyFunctionTypes(rowType.inputs,parsedQuery.elems,rowType.where_clause,null,mgens=>{return unifyFunctionTypes(rowType.output,parsedQuery.returned,rowType.where_clause,mgens,checkTypeMgensForConflict,0,)},0,)){return}results.max_dist=Math.max(results.max_dist||0,tfpDist);addIntoResults(results,row.id.toString(),pos,0,tfpDist,0,Number.MAX_VALUE)}const compareTypeFingerprints=(fullId,queryFingerprint)=>{const fh0=this.functionTypeFingerprint[fullId*4];const fh1=this.functionTypeFingerprint[(fullId*4)+1];const fh2=this.functionTypeFingerprint[(fullId*4)+2];const[qh0,qh1,qh2]=queryFingerprint;const[in0,in1,in2]=[fh0&qh0,fh1&qh1,fh2&qh2];if((in0 ^ qh0)||(in1 ^ qh1)||(in2 ^ qh2)){return null}return this.functionTypeFingerprint[(fullId*4)+3]};const innerRunQuery=()=>{if(parsedQuery.foundElems===1&&!parsedQuery.hasReturnArrow){const elem=parsedQuery.elems[0];const handleNameSearch=id=>{const row=this.searchIndex[id];if(!typePassesFilter(elem.typeFilter,row.ty)||(filterCrates!==null&&row.crate!==filterCrates)){return}let pathDist=0;if(elem.fullPath.length>1){pathDist=checkPath(elem.pathWithoutLast,row);if(pathDist===null){return}}if(parsedQuery.literalSearch){if(row.word===elem.pathLast){addIntoResults(results_others,row.id,id,0,0,pathDist)}}else{addIntoResults(results_others,row.id,id,row.normalizedName.indexOf(elem.normalizedPathLast),editDistance(row.normalizedName,elem.normalizedPathLast,maxEditDistance,),pathDist,maxEditDistance,)}};if(elem.normalizedPathLast!==""){const last=elem.normalizedPathLast;for(const id of this.nameTrie.search(last,this.tailTable)){handleNameSearch(id)}}const length=this.searchIndex.length;for(let i=0,nSearchIndex=length;i0){const sortQ=(a,b)=>{const ag=a.generics.length===0&&a.bindings.size===0;const bg=b.generics.length===0&&b.bindings.size===0;if(ag!==bg){return ag-bg}const ai=a.id>0;const bi=b.id>0;return ai-bi};parsedQuery.elems.sort(sortQ);parsedQuery.returned.sort(sortQ);for(let i=0,nSearchIndex=this.searchIndex.length;i{const descs=await Promise.all(list.map(result=>{return this.searchIndexEmptyDesc.get(result.crate).contains(result.bitIndex)?"":this.searchState.loadDesc(result)}));for(const[i,result]of list.entries()){result.desc=descs[i]}}));if(parsedQuery.error!==null&&ret.others.length!==0){ret.query.error=null}return ret}}let rawSearchIndex;let docSearch;const longItemTypes=["keyword","primitive type","module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","assoc type","constant","assoc const","union","foreign type","existential type","attribute macro","derive macro","trait alias",];let currentResults;function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&window.searchIndex.has(elem.value)){return elem.value}return null}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}async function addTab(array,query,display){const extraClass=display?" active":"";const output=document.createElement(array.length===0&&query.error===null?"div":"ul",);if(array.length>0){output.className="search-results "+extraClass;const lis=Promise.all(array.map(async item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("span");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
\ +${item.alias} - see \ +
`}resultName.insertAdjacentHTML("beforeend",`
${alias}\ +${item.displayPath}${name}\ +
`);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);if(item.displayTypeSignature){const{type,mappedNames,whereClause}=await item.displayTypeSignature;const displayType=document.createElement("div");type.forEach((value,index)=>{if(index%2!==0){const highlight=document.createElement("strong");highlight.appendChild(document.createTextNode(value));displayType.appendChild(highlight)}else{displayType.appendChild(document.createTextNode(value))}});if(mappedNames.size>0||whereClause.size>0){let addWhereLineFn=()=>{const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode("where"));displayType.appendChild(line);addWhereLineFn=()=>{}};for(const[qname,name]of mappedNames){if(name===qname){continue}addWhereLineFn();const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode(` ${qname} matches `));const lineStrong=document.createElement("strong");lineStrong.appendChild(document.createTextNode(name));line.appendChild(lineStrong);displayType.appendChild(line)}for(const[name,innerType]of whereClause){if(innerType.length<=1){continue}addWhereLineFn();const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode(` ${name}: `));innerType.forEach((value,index)=>{if(index%2!==0){const highlight=document.createElement("strong");highlight.appendChild(document.createTextNode(value));line.appendChild(highlight)}else{line.appendChild(document.createTextNode(value))}});displayType.appendChild(line)}}displayType.className="type-signature";link.appendChild(displayType)}link.appendChild(description);return link}));lis.then(lis=>{for(const li of lis){output.appendChild(li)}})}else if(query.error===null){const dlroChannel=`https://doc.rust-lang.org/${getVar("channel")}`;output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return output}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}async function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=DocSearch.parseQuery(searchState.input.value)}currentResults=results.query.userQuery;let currentTab=searchState.currentTab;if((currentTab===0&&results.others.length===0)||(currentTab===1&&results.in_args.length===0)||(currentTab===2&&results.returned.length===0)){if(results.others.length!==0){currentTab=0}else if(results.in_args.length){currentTab=1}else if(results.returned.length){currentTab=2}}let crates="";if(rawSearchIndex.size>1){crates="
in 
"+"
"}let output=`
\ +

Results

${crates}
`;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

Query parser error: "${error.join("")}".

`;output+="
"+makeTabHeader(0,"In Names",results.others.length)+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",results.others.length)+makeTabHeader(1,"In Parameters",results.in_args.length)+makeTabHeader(2,"In Return Types",results.returned.length)+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,results.others.length)+"
";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

`}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

"+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

`}const[ret_others,ret_in_args,ret_returned]=await Promise.all([addTab(results.others,results.query,currentTab===0),addTab(results.in_args,results.query,currentTab===1),addTab(results.returned,results.query,currentTab===2),]);const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others);resultsElem.appendChild(ret_in_args);resultsElem.appendChild(ret_returned);search.innerHTML=output;if(searchState.rustdocToolbar){search.querySelector(".main-heading").appendChild(searchState.rustdocToolbar)}const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}async function search(forced){const query=DocSearch.parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="\""+query.userQuery+"\" Search - Rust";updateSearchHistory(buildUrl(query.userQuery,filterCrates));await showResults(await docSearch.execQuery(query,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{if(window.searchState.input){window.searchState.input.placeholder=window.searchState.origPlaceholder}});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;e.preventDefault();search()}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(true)}function initSearch(searchIndx){rawSearchIndex=searchIndx;if(typeof window!=="undefined"){docSearch=new DocSearch(rawSearchIndex,ROOT_PATH,searchState);registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}else if(typeof exports!=="undefined"){docSearch=new DocSearch(rawSearchIndex,ROOT_PATH,searchState);exports.docSearch=docSearch;exports.parseQuery=DocSearch.parseQuery}}if(typeof exports!=="undefined"){exports.initSearch=initSearch}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch(new Map())}class ParametricDescription{constructor(w,n,minErrors){this.w=w;this.n=n;this.minErrors=minErrors}isAccept(absState){const state=Math.floor(absState/(this.w+1));const offset=absState%(this.w+1);return this.w-offset+this.minErrors[state]<=this.n}getPosition(absState){return absState%(this.w+1)}getVector(name,charCode,pos,end){let vector=0;for(let i=pos;i>5;const bitStart=bitLoc&31;if(bitStart+bitsPerValue<=32){return((data[dataLoc]>>bitStart)&this.MASKS[bitsPerValue-1])}else{const part=32-bitStart;return ~~(((data[dataLoc]>>bitStart)&this.MASKS[part-1])+((data[1+dataLoc]&this.MASKS[bitsPerValue-part-1])<{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=()=>{changeSetting(toggle.id,toggle.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){if(setting==="hr"){output+="
";continue}const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ -
-
${setting_name}
-
`;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ - `});output+=`\ -
-
`}else{const checked=setting["default"]===true?" checked":"";output+=`\ -
\ - \ -
`}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Hide persistent navigation bar","js_name":"hide-sidebar","default":false,},{"name":"Hide table of contents","js_name":"hide-toc","default":false,},{"name":"Hide module navigation","js_name":"hide-modnav","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
${buildSettingsPageSections(settings)}
`;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display="";onEachLazy(settingsMenu.querySelectorAll("input[type='checkbox']"),el=>{const val=getSettingValue(el.id);const checked=val==="true";if(checked!==el.checked&&val!==null){el.checked=checked}})}function settingsBlurHandler(event){if(!getHelpButton().contains(document.activeElement)&&!getHelpButton().contains(event.relatedTarget)&&!getSettingsButton().contains(document.activeElement)&&!getSettingsButton().contains(event.relatedTarget)){window.hidePopoverMenus()}}if(!isSettingsPage){const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=event=>{if(settingsMenu.contains(event.target)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/docs/static.files/settings-5514c975.js b/docs/static.files/settings-5514c975.js new file mode 100644 index 0000000..fa2cbe6 --- /dev/null +++ b/docs/static.files/settings-5514c975.js @@ -0,0 +1,17 @@ +"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function elemContainsTarget(elem,target){if(target instanceof Node){return elem.contains(target)}else{return false}}function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,""+value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){const f=window.rustdoc_add_line_numbers_to_examples;if(f!==undefined){f()}}else{const f=window.rustdoc_remove_line_numbers_from_examples;if(f!==undefined){f()}}break;case"hide-sidebar":if(value===true){addClass(document.documentElement,"hide-sidebar")}else{removeClass(document.documentElement,"hide-sidebar")}break;case"hide-toc":if(value===true){addClass(document.documentElement,"hide-toc")}else{removeClass(document.documentElement,"hide-toc")}break;case"hide-modnav":if(value===true){addClass(document.documentElement,"hide-modnav")}else{removeClass(document.documentElement,"hide-modnav")}break;case"sans-serif-fonts":if(value===true){addClass(document.documentElement,"sans-serif")}else{removeClass(document.documentElement,"sans-serif")}break;case"word-wrap-source-code":if(value===true){addClass(document.documentElement,"word-wrap-source-code")}else{removeClass(document.documentElement,"word-wrap-source-code")}break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=()=>{changeSetting(toggle.id,toggle.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",()=>{changeSetting(elem.name,elem.value)})},)}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ +
+
${setting_name}
+
`;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ + `});output+=`\ +
+
`}else{const checked=setting["default"]===true?" checked":"";output+=`\ +
\ + \ +
`}}return output}function buildSettingsPage(){const theme_list=getVar("themes");const theme_names=(theme_list===null?"":theme_list).split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Hide persistent navigation bar","js_name":"hide-sidebar","default":false,},{"name":"Hide table of contents","js_name":"hide-toc","default":false,},{"name":"Hide module navigation","js_name":"hide-modnav","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},{"name":"Use sans serif fonts","js_name":"sans-serif-fonts","default":false,},{"name":"Word wrap source code","js_name":"word-wrap-source-code","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
${buildSettingsPageSections(settings)}
`;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){const mainElem=document.getElementById(MAIN_ID);if(mainElem!==null){mainElem.appendChild(el)}}else{el.setAttribute("tabindex","-1");const settingsBtn=getSettingsButton();if(settingsBtn!==null){settingsBtn.appendChild(el)}}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display="";onEachLazy(settingsMenu.querySelectorAll("input[type='checkbox']"),el=>{const val=getSettingValue(el.id);const checked=val==="true";if(checked!==el.checked&&val!==null){el.checked=checked}})}function settingsBlurHandler(event){const helpBtn=getHelpButton();const settingsBtn=getSettingsButton();const helpUnfocused=helpBtn===null||(!helpBtn.contains(document.activeElement)&&!elemContainsTarget(helpBtn,event.relatedTarget));const settingsUnfocused=settingsBtn===null||(!settingsBtn.contains(document.activeElement)&&!elemContainsTarget(settingsBtn,event.relatedTarget));if(helpUnfocused&&settingsUnfocused){window.hidePopoverMenus()}}if(!isSettingsPage){const settingsButton=nonnull(getSettingsButton());const settingsMenu=nonnull(document.getElementById("settings"));settingsButton.onclick=event=>{if(elemContainsTarget(settingsMenu,event.target)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals(false);if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;nonnull(settingsButton.querySelector("a")).onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/docs/static.files/src-script-56102188.js b/docs/static.files/src-script-56102188.js deleted file mode 100644 index d0aebb8..0000000 --- a/docs/static.files/src-script-56102188.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(function(){const rootPath=getVar("root-path");const NAME_OFFSET=0;const DIRS_OFFSET=1;const FILES_OFFSET=2;const RUSTDOC_MOBILE_BREAKPOINT=700;function closeSidebarIfMobile(){if(window.innerWidth{removeClass(document.documentElement,"src-sidebar-expanded");updateLocalStorage("source-sidebar-show","false")};window.rustdocShowSourceSidebar=()=>{addClass(document.documentElement,"src-sidebar-expanded");updateLocalStorage("source-sidebar-show","true")};window.rustdocToggleSrcSidebar=()=>{if(document.documentElement.classList.contains("src-sidebar-expanded")){window.rustdocCloseSourceSidebar()}else{window.rustdocShowSourceSidebar()}};function createSrcSidebar(){const container=document.querySelector("nav.sidebar");const sidebar=document.createElement("div");sidebar.id="src-sidebar";let hasFoundFile=false;for(const[key,source]of srcIndex){source[NAME_OFFSET]=key;hasFoundFile=createDirEntry(source,sidebar,"",hasFoundFile)}container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}function highlightSrcLines(){const match=window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/);if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{onEachLazy(e.getElementsByTagName("a"),i_e=>{removeClass(i_e,"line-highlighted")})});for(let i=from;i<=to;++i){elem=document.getElementById(i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSrcHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,null,"#"+name);highlightSrcLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)||ev.ctrlKey||ev.altKey||ev.metaKey){return}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",highlightSrcLines);onEachLazy(document.getElementsByClassName("src-line-numbers"),el=>{el.addEventListener("click",handleSrcHighlight)});highlightSrcLines();window.createSrcSidebar=createSrcSidebar})() \ No newline at end of file diff --git a/docs/static.files/src-script-63605ae7.js b/docs/static.files/src-script-63605ae7.js new file mode 100644 index 0000000..98cebca --- /dev/null +++ b/docs/static.files/src-script-63605ae7.js @@ -0,0 +1 @@ +"use strict";(function(){const rootPath=getVar("root-path");const NAME_OFFSET=0;const DIRS_OFFSET=1;const FILES_OFFSET=2;const RUSTDOC_MOBILE_BREAKPOINT=700;function closeSidebarIfMobile(){if(window.innerWidth{removeClass(document.documentElement,"src-sidebar-expanded");updateLocalStorage("source-sidebar-show","false")};window.rustdocShowSourceSidebar=()=>{addClass(document.documentElement,"src-sidebar-expanded");updateLocalStorage("source-sidebar-show","true")};window.rustdocToggleSrcSidebar=()=>{if(document.documentElement.classList.contains("src-sidebar-expanded")){window.rustdocCloseSourceSidebar()}else{window.rustdocShowSourceSidebar()}};function createSrcSidebar(){const container=nonnull(document.querySelector("nav.sidebar"));const sidebar=document.createElement("div");sidebar.id="src-sidebar";let hasFoundFile=false;for(const[key,source]of srcIndex){source[NAME_OFFSET]=key;hasFoundFile=createDirEntry(source,sidebar,"",hasFoundFile)}container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}function highlightSrcLines(){const match=window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/);if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{removeClass(e,"line-highlighted")});for(let i=from;i<=to;++i){elem=document.getElementById(""+i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSrcHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,"","#"+name);highlightSrcLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)||ev.ctrlKey||ev.altKey||ev.metaKey){return}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(""+cur_line_id)}}}());window.addEventListener("hashchange",highlightSrcLines);onEachLazy(document.querySelectorAll("a[data-nosnippet]"),el=>{el.addEventListener("click",handleSrcHighlight)});highlightSrcLines();window.createSrcSidebar=createSrcSidebar})() \ No newline at end of file diff --git a/docs/static.files/storage-4e99c027.js b/docs/static.files/storage-4e99c027.js new file mode 100644 index 0000000..dac9e9d --- /dev/null +++ b/docs/static.files/storage-4e99c027.js @@ -0,0 +1,23 @@ +"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=(function(){const currentTheme=document.getElementById("themeStyle");return currentTheme instanceof HTMLLinkElement?currentTheme:null})();const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function nonnull(x,msg){if(x===null){throw(msg||"unexpected null value!")}else{return x}}function nonundef(x,msg){if(x===undefined){throw(msg||"unexpected null value!")}else{return x}}function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return!!elem&&!!elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func){for(const elem of arr){if(func(elem)){return true}}return false}function onEachLazy(lazyArray,func){return onEach(Array.prototype.slice.call(lazyArray),func)}function updateLocalStorage(name,value){try{if(value===null){window.localStorage.removeItem("rustdoc-"+name)}else{window.localStorage.setItem("rustdoc-"+name,value)}}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.getAttribute("data-"+name):null}function switchTheme(newThemeName,saveTheme){const themeNames=(getVar("themes")||"").split(",").filter(t=>t);themeNames.push(...builtinThemes);if(newThemeName===null||themeNames.indexOf(newThemeName)===-1){return}if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme&&window.currentTheme.parentNode){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+encodeURIComponent(newThemeName)+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=(function(){const currentTheme=document.getElementById("themeStyle");return currentTheme instanceof HTMLLinkElement?currentTheme:null})()}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&localStoredTheme!==null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}if(getSettingValue("hide-sidebar")==="true"){addClass(document.documentElement,"hide-sidebar")}if(getSettingValue("hide-toc")==="true"){addClass(document.documentElement,"hide-toc")}if(getSettingValue("hide-modnav")==="true"){addClass(document.documentElement,"hide-modnav")}if(getSettingValue("sans-serif-fonts")==="true"){addClass(document.documentElement,"sans-serif")}if(getSettingValue("word-wrap-source-code")==="true"){addClass(document.documentElement,"word-wrap-source-code")}function updateSidebarWidth(){const desktopSidebarWidth=getSettingValue("desktop-sidebar-width");if(desktopSidebarWidth&&desktopSidebarWidth!=="null"){document.documentElement.style.setProperty("--desktop-sidebar-width",desktopSidebarWidth+"px",)}const srcSidebarWidth=getSettingValue("src-sidebar-width");if(srcSidebarWidth&&srcSidebarWidth!=="null"){document.documentElement.style.setProperty("--src-sidebar-width",srcSidebarWidth+"px",)}}updateSidebarWidth();window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0);setTimeout(updateSidebarWidth,0)}});class RustdocSearchElement extends HTMLElement{constructor(){super()}connectedCallback(){const rootPath=getVar("root-path");const currentCrate=getVar("current-crate");this.innerHTML=``}}window.customElements.define("rustdoc-search",RustdocSearchElement);class RustdocToolbarElement extends HTMLElement{constructor(){super()}connectedCallback(){if(this.firstElementChild){return}const rootPath=getVar("root-path");this.innerHTML=` +
+ Settings +
+
+ Help +
+ `}}window.customElements.define("rustdoc-toolbar",RustdocToolbarElement) \ No newline at end of file diff --git a/docs/static.files/storage-59e33391.js b/docs/static.files/storage-59e33391.js deleted file mode 100644 index 5aac776..0000000 --- a/docs/static.files/storage-59e33391.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func){for(const elem of arr){if(func(elem)){return true}}return false}function onEachLazy(lazyArray,func){return onEach(Array.prototype.slice.call(lazyArray),func)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){const themeNames=getVar("themes").split(",").filter(t=>t);themeNames.push(...builtinThemes);if(themeNames.indexOf(newThemeName)===-1){return}if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+encodeURIComponent(newThemeName)+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}if(getSettingValue("hide-sidebar")==="true"){addClass(document.documentElement,"hide-sidebar")}if(getSettingValue("hide-toc")==="true"){addClass(document.documentElement,"hide-toc")}if(getSettingValue("hide-modnav")==="true"){addClass(document.documentElement,"hide-modnav")}function updateSidebarWidth(){const desktopSidebarWidth=getSettingValue("desktop-sidebar-width");if(desktopSidebarWidth&&desktopSidebarWidth!=="null"){document.documentElement.style.setProperty("--desktop-sidebar-width",desktopSidebarWidth+"px",)}const srcSidebarWidth=getSettingValue("src-sidebar-width");if(srcSidebarWidth&&srcSidebarWidth!=="null"){document.documentElement.style.setProperty("--src-sidebar-width",srcSidebarWidth+"px",)}}updateSidebarWidth();window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0);setTimeout(updateSidebarWidth,0)}});class RustdocSearchElement extends HTMLElement{constructor(){super()}connectedCallback(){const rootPath=getVar("root-path");const currentCrate=getVar("current-crate");this.innerHTML=``}}window.customElements.define("rustdoc-search",RustdocSearchElement);class RustdocToolbarElement extends HTMLElement{constructor(){super()}connectedCallback(){if(this.firstElementChild){return}const rootPath=getVar("root-path");this.innerHTML=` -
- Settings -
-
- Help -
- `}}window.customElements.define("rustdoc-toolbar",RustdocToolbarElement) \ No newline at end of file diff --git a/docs/trait.impl/casper_types/bytesrepr/trait.FromBytes.js b/docs/trait.impl/casper_types/bytesrepr/trait.FromBytes.js index aa84931..059d2d0 100644 --- a/docs/trait.impl/casper_types/bytesrepr/trait.FromBytes.js +++ b/docs/trait.impl/casper_types/bytesrepr/trait.FromBytes.js @@ -1,5 +1,5 @@ (function() { - var implementors = Object.fromEntries([["casper_name_contracts",[["impl FromBytes for PaymentFulfilled"],["impl FromBytes for SignerPublicKeyChanged"],["impl FromBytes for TreasuryAddressChanged"],["impl FromBytes for GracePeriodChanged"],["impl FromBytes for NameTokenAddressChanged"],["impl FromBytes for ResolutionChanged"],["impl FromBytes for ResolutionCleared"],["impl FromBytes for PrimaryNameChanged"],["impl FromBytes for NameMintInfo"],["impl FromBytes for NameTransferInfo"],["impl FromBytes for PaymentInfo"],["impl FromBytes for PaymentVoucher"],["impl FromBytes for RenewalPaymentVoucher"],["impl FromBytes for RenewalVoucher"],["impl FromBytes for SecondarySaleVoucher"],["impl FromBytes for TokenRenewalInfo"],["impl FromBytes for TokenizationVoucher"]]]]); + var implementors = Object.fromEntries([["casper_name_contracts",[["impl FromBytes for PaymentFulfilled"],["impl FromBytes for SignerPublicKeyChanged"],["impl FromBytes for TreasuryAddressChanged"],["impl FromBytes for GracePeriodChanged"],["impl FromBytes for NameTokenAddressChanged"],["impl FromBytes for ResolutionChanged"],["impl FromBytes for ResolutionCleared"],["impl FromBytes for PrimaryNameChanged"],["impl FromBytes for NameMintInfo"],["impl FromBytes for NameTransferInfo"],["impl FromBytes for PaymentInfo"],["impl FromBytes for PaymentVoucher"],["impl FromBytes for RenewalPaymentVoucher"],["impl FromBytes for RenewalVoucher"],["impl FromBytes for SecondarySaleVoucher"],["impl FromBytes for TokenRenewalInfo"],["impl FromBytes for TokenizationVoucher"]]]]); if (window.register_implementors) { window.register_implementors(implementors); } else { diff --git a/docs/trait.impl/casper_types/bytesrepr/trait.ToBytes.js b/docs/trait.impl/casper_types/bytesrepr/trait.ToBytes.js index 041f658..8ccdc30 100644 --- a/docs/trait.impl/casper_types/bytesrepr/trait.ToBytes.js +++ b/docs/trait.impl/casper_types/bytesrepr/trait.ToBytes.js @@ -1,5 +1,5 @@ (function() { - var implementors = Object.fromEntries([["casper_name_contracts",[["impl ToBytes for PaymentFulfilled"],["impl ToBytes for SignerPublicKeyChanged"],["impl ToBytes for TreasuryAddressChanged"],["impl ToBytes for GracePeriodChanged"],["impl ToBytes for NameTokenAddressChanged"],["impl ToBytes for ResolutionChanged"],["impl ToBytes for ResolutionCleared"],["impl ToBytes for PrimaryNameChanged"],["impl ToBytes for NameMintInfo"],["impl ToBytes for NameTransferInfo"],["impl ToBytes for PaymentInfo"],["impl ToBytes for PaymentVoucher"],["impl ToBytes for RenewalPaymentVoucher"],["impl ToBytes for RenewalVoucher"],["impl ToBytes for SecondarySaleVoucher"],["impl ToBytes for TokenRenewalInfo"],["impl ToBytes for TokenizationVoucher"]]]]); + var implementors = Object.fromEntries([["casper_name_contracts",[["impl ToBytes for PaymentFulfilled"],["impl ToBytes for SignerPublicKeyChanged"],["impl ToBytes for TreasuryAddressChanged"],["impl ToBytes for GracePeriodChanged"],["impl ToBytes for NameTokenAddressChanged"],["impl ToBytes for ResolutionChanged"],["impl ToBytes for ResolutionCleared"],["impl ToBytes for PrimaryNameChanged"],["impl ToBytes for NameMintInfo"],["impl ToBytes for NameTransferInfo"],["impl ToBytes for PaymentInfo"],["impl ToBytes for PaymentVoucher"],["impl ToBytes for RenewalPaymentVoucher"],["impl ToBytes for RenewalVoucher"],["impl ToBytes for SecondarySaleVoucher"],["impl ToBytes for TokenRenewalInfo"],["impl ToBytes for TokenizationVoucher"]]]]); if (window.register_implementors) { window.register_implementors(implementors); } else { diff --git a/docs/trait.impl/casper_types/cl_type/trait.CLTyped.js b/docs/trait.impl/casper_types/cl_type/trait.CLTyped.js index 403f7c9..e668adf 100644 --- a/docs/trait.impl/casper_types/cl_type/trait.CLTyped.js +++ b/docs/trait.impl/casper_types/cl_type/trait.CLTyped.js @@ -1,5 +1,5 @@ (function() { - var implementors = Object.fromEntries([["casper_name_contracts",[["impl CLTyped for PaymentFulfilled"],["impl CLTyped for SignerPublicKeyChanged"],["impl CLTyped for TreasuryAddressChanged"],["impl CLTyped for GracePeriodChanged"],["impl CLTyped for NameTokenAddressChanged"],["impl CLTyped for ResolutionChanged"],["impl CLTyped for ResolutionCleared"],["impl CLTyped for PrimaryNameChanged"],["impl CLTyped for NameMintInfo"],["impl CLTyped for NameTransferInfo"],["impl CLTyped for PaymentInfo"],["impl CLTyped for PaymentVoucher"],["impl CLTyped for RenewalPaymentVoucher"],["impl CLTyped for RenewalVoucher"],["impl CLTyped for SecondarySaleVoucher"],["impl CLTyped for TokenRenewalInfo"],["impl CLTyped for TokenizationVoucher"]]]]); + var implementors = Object.fromEntries([["casper_name_contracts",[["impl CLTyped for PaymentFulfilled"],["impl CLTyped for SignerPublicKeyChanged"],["impl CLTyped for TreasuryAddressChanged"],["impl CLTyped for GracePeriodChanged"],["impl CLTyped for NameTokenAddressChanged"],["impl CLTyped for ResolutionChanged"],["impl CLTyped for ResolutionCleared"],["impl CLTyped for PrimaryNameChanged"],["impl CLTyped for NameMintInfo"],["impl CLTyped for NameTransferInfo"],["impl CLTyped for PaymentInfo"],["impl CLTyped for PaymentVoucher"],["impl CLTyped for RenewalPaymentVoucher"],["impl CLTyped for RenewalVoucher"],["impl CLTyped for SecondarySaleVoucher"],["impl CLTyped for TokenRenewalInfo"],["impl CLTyped for TokenizationVoucher"]]]]); if (window.register_implementors) { window.register_implementors(implementors); } else { diff --git a/docs/trait.impl/core/convert/trait.Into.js b/docs/trait.impl/core/convert/trait.Into.js index e43109f..dd407dd 100644 --- a/docs/trait.impl/core/convert/trait.Into.js +++ b/docs/trait.impl/core/convert/trait.Into.js @@ -1,5 +1,5 @@ (function() { - var implementors = Object.fromEntries([["casper_name_contracts",[["impl Into<RuntimeArgs> for ControllerInitArgs"],["impl Into<RuntimeArgs> for SecondaryMarketInitArgs"],["impl Into<RuntimeArgs> for NameTokenInitArgs"],["impl Into<RuntimeArgs> for RegistrarInitArgs"],["impl Into<RuntimeArgs> for DefaultResolverInitArgs"],["impl Into<RuntimeArgs> for ReverseResolverInitArgs"]]]]); + var implementors = Object.fromEntries([["casper_name_contracts",[["impl Into<RuntimeArgs> for ControllerInitArgs"],["impl Into<RuntimeArgs> for SecondaryMarketInitArgs"],["impl Into<RuntimeArgs> for NameTokenInitArgs"],["impl Into<RuntimeArgs> for RegistrarInitArgs"],["impl Into<RuntimeArgs> for DefaultResolverInitArgs"],["impl Into<RuntimeArgs> for ReverseResolverInitArgs"]]]]); if (window.register_implementors) { window.register_implementors(implementors); } else { diff --git a/docs/trait.impl/core/marker/trait.UnsafeUnpin.js b/docs/trait.impl/core/marker/trait.UnsafeUnpin.js new file mode 100644 index 0000000..305431d --- /dev/null +++ b/docs/trait.impl/core/marker/trait.UnsafeUnpin.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["casper_name_contracts",[["impl UnsafeUnpin for ControllerError",1,["casper_name_contracts::contracts::controller::ControllerError"]],["impl UnsafeUnpin for NameTokenError",1,["casper_name_contracts::contracts::name_token::NameTokenError"]],["impl UnsafeUnpin for RegistrarError",1,["casper_name_contracts::contracts::registrar::RegistrarError"]],["impl UnsafeUnpin for ResolverError",1,["casper_name_contracts::contracts::resolver::ResolverError"]],["impl UnsafeUnpin for NameTokenError",1,["casper_name_contracts::data_structures::NameTokenError"]],["impl UnsafeUnpin for BaseController",1,["casper_name_contracts::contracts::controller::BaseController"]],["impl UnsafeUnpin for BaseControllerContractRef",1,["casper_name_contracts::contracts::controller::BaseControllerContractRef"]],["impl UnsafeUnpin for BaseControllerHostRef",1,["casper_name_contracts::contracts::controller::__base_controller_test_parts::BaseControllerHostRef"]],["impl UnsafeUnpin for Controller",1,["casper_name_contracts::contracts::controller::Controller"]],["impl UnsafeUnpin for ControllerContractRef",1,["casper_name_contracts::contracts::controller::ControllerContractRef"]],["impl UnsafeUnpin for ControllerHostRef",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerHostRef"]],["impl UnsafeUnpin for ControllerInitArgs",1,["casper_name_contracts::contracts::controller::__controller_test_parts::ControllerInitArgs"]],["impl UnsafeUnpin for PaymentFulfilled",1,["casper_name_contracts::contracts::controller::PaymentFulfilled"]],["impl UnsafeUnpin for SignerPublicKeyChanged",1,["casper_name_contracts::contracts::controller::SignerPublicKeyChanged"]],["impl UnsafeUnpin for TreasuryAddressChanged",1,["casper_name_contracts::contracts::controller::TreasuryAddressChanged"]],["impl UnsafeUnpin for SecondaryMarket",1,["casper_name_contracts::contracts::marketplace::SecondaryMarket"]],["impl UnsafeUnpin for SecondaryMarketContractRef",1,["casper_name_contracts::contracts::marketplace::SecondaryMarketContractRef"]],["impl UnsafeUnpin for SecondaryMarketHostRef",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketHostRef"]],["impl UnsafeUnpin for SecondaryMarketInitArgs",1,["casper_name_contracts::contracts::marketplace::__secondary_market_test_parts::SecondaryMarketInitArgs"]],["impl UnsafeUnpin for NameToken",1,["casper_name_contracts::contracts::name_token::NameToken"]],["impl UnsafeUnpin for NameTokenContractRef",1,["casper_name_contracts::contracts::name_token::NameTokenContractRef"]],["impl UnsafeUnpin for NameTokenHostRef",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenHostRef"]],["impl UnsafeUnpin for NameTokenInitArgs",1,["casper_name_contracts::contracts::name_token::__name_token_test_parts::NameTokenInitArgs"]],["impl UnsafeUnpin for GracePeriodChanged",1,["casper_name_contracts::contracts::registrar::GracePeriodChanged"]],["impl UnsafeUnpin for Registrar",1,["casper_name_contracts::contracts::registrar::Registrar"]],["impl UnsafeUnpin for RegistrarContractRef",1,["casper_name_contracts::contracts::registrar::RegistrarContractRef"]],["impl UnsafeUnpin for RegistrarHostRef",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarHostRef"]],["impl UnsafeUnpin for RegistrarInitArgs",1,["casper_name_contracts::contracts::registrar::__registrar_test_parts::RegistrarInitArgs"]],["impl UnsafeUnpin for DefaultResolver",1,["casper_name_contracts::contracts::resolver::DefaultResolver"]],["impl UnsafeUnpin for DefaultResolverContractRef",1,["casper_name_contracts::contracts::resolver::DefaultResolverContractRef"]],["impl UnsafeUnpin for DefaultResolverHostRef",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverHostRef"]],["impl UnsafeUnpin for DefaultResolverInitArgs",1,["casper_name_contracts::contracts::resolver::__default_resolver_test_parts::DefaultResolverInitArgs"]],["impl UnsafeUnpin for NameTokenAddressChanged",1,["casper_name_contracts::contracts::resolver::NameTokenAddressChanged"]],["impl UnsafeUnpin for ResolutionChanged",1,["casper_name_contracts::contracts::resolver::ResolutionChanged"]],["impl UnsafeUnpin for ResolutionCleared",1,["casper_name_contracts::contracts::resolver::ResolutionCleared"]],["impl UnsafeUnpin for ResolverContractRef",1,["casper_name_contracts::contracts::resolver::ResolverContractRef"]],["impl UnsafeUnpin for ResolverHostRef",1,["casper_name_contracts::contracts::resolver::__resolver_test_parts::ResolverHostRef"]],["impl UnsafeUnpin for PrimaryNameChanged",1,["casper_name_contracts::contracts::reverse_resolver::PrimaryNameChanged"]],["impl UnsafeUnpin for ReverseResolver",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolver"]],["impl UnsafeUnpin for ReverseResolverContractRef",1,["casper_name_contracts::contracts::reverse_resolver::ReverseResolverContractRef"]],["impl UnsafeUnpin for ReverseResolverHostRef",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverHostRef"]],["impl UnsafeUnpin for ReverseResolverInitArgs",1,["casper_name_contracts::contracts::reverse_resolver::__reverse_resolver_test_parts::ReverseResolverInitArgs"]],["impl UnsafeUnpin for NameMintInfo",1,["casper_name_contracts::data_structures::NameMintInfo"]],["impl UnsafeUnpin for NameTokenMetadata",1,["casper_name_contracts::data_structures::NameTokenMetadata"]],["impl UnsafeUnpin for NameTransferInfo",1,["casper_name_contracts::data_structures::NameTransferInfo"]],["impl UnsafeUnpin for PaymentInfo",1,["casper_name_contracts::data_structures::PaymentInfo"]],["impl UnsafeUnpin for PaymentVoucher",1,["casper_name_contracts::data_structures::PaymentVoucher"]],["impl UnsafeUnpin for RenewalPaymentVoucher",1,["casper_name_contracts::data_structures::RenewalPaymentVoucher"]],["impl UnsafeUnpin for RenewalVoucher",1,["casper_name_contracts::data_structures::RenewalVoucher"]],["impl UnsafeUnpin for SecondarySaleVoucher",1,["casper_name_contracts::data_structures::SecondarySaleVoucher"]],["impl UnsafeUnpin for TokenRenewalInfo",1,["casper_name_contracts::data_structures::TokenRenewalInfo"]],["impl UnsafeUnpin for TokenizationVoucher",1,["casper_name_contracts::data_structures::TokenizationVoucher"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[15985]} \ No newline at end of file From 6b672c6b6522b077bf3e54a1a8799e2fca0d2d86 Mon Sep 17 00:00:00 2001 From: kpob <1809734+kpob@users.noreply.github.com> Date: Wed, 9 Jul 2025 14:18:27 +0000 Subject: [PATCH 172/172] Render PlantUML files --- .../puml/admin-transfer-domain.png | Bin 53638 -> 53639 bytes .../puml/approve-for-all.png | Bin 27599 -> 27598 bytes .../puml/approve-revoke-operator.png | Bin 26560 -> 26559 bytes docs/sequence-diagrams/puml/burn-domain.png | Bin 38369 -> 38369 bytes .../puml/clean-up-records.png | Bin 29263 -> 29263 bytes .../puml/d3-marketplace-buy-cspr-token.png | Bin 79254 -> 79254 bytes .../puml/d3-marketplace-list.png | Bin 34379 -> 34379 bytes .../puml/d3operator-set-signer.png | Bin 14069 -> 14069 bytes .../puml/d3operator-set-treasury-account.png | Bin 14569 -> 14569 bytes docs/sequence-diagrams/puml/expire-domain.png | Bin 46887 -> 46887 bytes .../puml/lookup-account-name.png | Bin 9219 -> 9219 bytes .../offchain-multiple-purchase-prolong.png | Bin 39237 -> 39237 bytes .../puml/offchain-multiple-purchase.png | Bin 65166 -> 65167 bytes .../puml/offchain-renewal.png | Bin 51890 -> 51890 bytes .../onchain-multiple-purchase-prolong.png | Bin 64358 -> 64358 bytes .../puml/onchain-multiple-purchase.png | Bin 91403 -> 91405 bytes .../puml/onchain-name-resolution-wrapped.png | Bin 31438 -> 31438 bytes .../puml/onchain-name-resolution.png | Bin 25109 -> 25109 bytes .../puml/onchain-renewal.png | Bin 77681 -> 77681 bytes docs/sequence-diagrams/puml/resolve-name.png | Bin 41793 -> 41792 bytes .../puml/revoke-controller.png | Bin 16152 -> 16152 bytes .../puml/set-account-address-record.png | Bin 35358 -> 35357 bytes .../puml/set-default-resolver.png | Bin 15890 -> 15890 bytes .../puml/set-grace-period.png | Bin 14941 -> 14941 bytes docs/sequence-diagrams/puml/set-resolver.png | Bin 18609 -> 18607 bytes .../puml/set-reverse-resolution.png | Bin 21018 -> 21017 bytes docs/sequence-diagrams/puml/set-signer.png | Bin 13467 -> 13467 bytes .../puml/set-transfer-filter.png | Bin 19451 -> 19451 bytes .../puml/set-treasury-account.png | Bin 13883 -> 13882 bytes .../puml/transfer-domain.png | Bin 25647 -> 25646 bytes .../puml/transfer-from-domain.png | Bin 42395 -> 42394 bytes .../puml/whitelist-controller.png | Bin 15751 -> 15751 bytes .../puml/whitelist-registrar.png | Bin 19796 -> 19795 bytes 33 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/sequence-diagrams/puml/admin-transfer-domain.png b/docs/sequence-diagrams/puml/admin-transfer-domain.png index 9ef385cbe9a98e7a536c27858e37d688edc13072..2c7f577d1fd1384259139d138d5398e273800b2f 100644 GIT binary patch delta 593 zcmV-X0PLcdjc!$S$B60&EI#I zi@Ai*egJ;+%+5J;&W=ZJ8jIRyNi5DL)}|(?R?`^SM=GI8s)l}N#37XRl%_$?;XS5ta@-l%v+fA085WgMY? zfx^v<*qVY6jRrh^@gz^s*U09XG$2GOLCMf)2(jq`%AdE%gJpPVS7k+}`B2T7^gCeJ z%5Z{aLgw+QZzyB+@of1_B1Q{U(!y$||p>z)Fq!WnI0F6{(DWL7qB9Y|}X7Z}7* zPPM)rkOm@p#>~a^Dt3@CuW%w_LeA3So)t?wSFk&>m+Y}QEM@B@07Lda`&kcD09~@^ ze8fTO-Hd>IVn^|t*Wr|CP$@arS0)|p%#8soX6^OSf7)}znm2Uie_zH%&>rP_tbHn? z1GDH2IGEU(`>juY>+l9%G#!rLDx#S$nA5g6ZHv>kIBkn#+v3judknfAa6*iq(^{o| zUcand6nki)oiWs}pjHdcKL+(n81%2fr%R&v{jLK>WjZ8?JgOXJe$GpxjWdM%jQyks z@G~WDw|=YxaKkgHJ{2ckfBT`kIq>14{8d`$k@l88bVX}5G&dZoNb)#v?BB{)qJuon faO|+1>T9=&tbTF1p7;wLw+}N*>KJLWwF1%35U?T4 delta 592 zcmV-W0f1Mr(?cFvh|c06)R8&t+7F}s)3QVC^J)%4qv2&o)#oGMHhyFhEC zu*rlJ!_Y_th4wXIlyFgCsRQF7PaOgj9%#z7QK$~$cbL#n>!WE#n2bf8!HrMTF`V z3Y`TBqYI2RoAC6-lRU#vq0ld+03nhIaskaIW4kV({5ek^tixloDJu$Ej^$F2`T)YU zGM=HHk$!qEc|ClAh9IkEv6Ly?f#C^h2JXpHo+guWoMfM)w5rcIvf5QRdpm#)XB5tX z{-j)?;Zi{4YS%!q$;Usze2k<8`wSBYxYy{uf- zuIiOWaexN8HilXQY9E8kdT@OMqv0+1bcq$e-}gXEt3ravqw_c-2O9PAS8iZH%3J!_XYI|T~B(wwul0@2P1`W=t} diff --git a/docs/sequence-diagrams/puml/approve-for-all.png b/docs/sequence-diagrams/puml/approve-for-all.png index 3527e93a3f34e99de5f33ac3f943730888db4f13..47ef04d46b506464e5fc830b0d23ea9e310dee99 100644 GIT binary patch delta 457 zcmV;)0XF{6*8$Gg0gzgMuW3|RbZ~58Zgh2RYybfO004NL?Nm)~8Zi*P`&W#(1f&81 zB~iK(5&5h{A&EkgD;jnOYSn9R?eSLp`;JN3C`t}3=NwiVjpx02Z}ha|!00)aMjiZM zu0q!DR|akB^m14B1O19*bLtiv*B(oy4luH_v0Rc@n6vY6_uEQ;T?voQbtPbE-C{|P z?kCxnTDoWp^c!eh*JL@glp2lTysEsb30y@U6UjD^NAnd%o>%-@xCF?o4EV9iX{!{#c5?Rxl2JGtWPI@c%WKp*r{(W@LyI}Xu`f;b3^F=(d~=aVsEp_)R=6MlBUK@=spwl znV@|Vbf5lFPqQi1o+HB~S{RQTvd!ZTT69T+x@NnpX delta 458 zcmV;*0X6>4*8$Jh0gzgMuxV6SbZ~58Zgh2RYybfO004NL?Nm)`8!-^Q>sJiE#D@AK zi81Mdi_?68Yd0ZIay8@Ku`8;Twj*ha|9wYJy&*J*)aM))hS9t??+uTg_<$T@Y1Gk= z5GtSb`;|ePI=$SLeNVq4*_^tC#tmbs)DgzuY%EvA3iIF?Zhu>UsVm{pxvm5Zt?yXU zgZoLgrB*K50(lFqtD0=^Ev3d|IIk*pHG!*$F_En0Lt`K$lm{oA1+2D^OOqJJW2JU` zp!)?H_6$6QCGNP;EQMn!R-OyZf@YONB1VOzYfq`J3bfP zl=`n{pYKx88|%}53GS(u8usd&3;dVWH5z}Y*W3{DJKa8uEe(2EljK6l;Y0XoD^(gWHPi^zz%j0av!x>};7lL{FdQF9V}t_p1)DAQmO? zG*_3j#%O{da#v`($z=O=_e{;uZX#}kTl`!|q62T`ZK3`ETy*3VBwm7Mvl0TlX$;Qa Ab^rhX diff --git a/docs/sequence-diagrams/puml/approve-revoke-operator.png b/docs/sequence-diagrams/puml/approve-revoke-operator.png index 9ea0064e1b29f692f4f99bcada01d0109316320d..f215275f124f70aa49a6f4b809ffdc889750700a 100644 GIT binary patch delta 404 zcmV;F0c-xi&jG*B0gze&myuf`e}E7*x(Noq69hG)Ud^yOLgVgqZKrGa_qHGyjULpi zx5?|gH}54c?K?p$zR1^2Qt8;)JX6R;{YlTL1qbn48C#d!GNym|ZEbtZmaSb$Uy1)p zEP8Mqf04V<5Gt}x8-`A+f4kM)X>HfXC@}C0-96}ZlCAxuy90N(#}JWP=YZ>RxQ2sfTZ7nHzNNjx~YSOIX#m9~b9XnJrzdSBSxZXRiYG1=e*?nml` y9?|C#7^%rLPm^%{thuL#$WxEgpdIoYhl+}whqtkM1!gh8KRJ0r0U)#c0mWq#?Zb`$ delta 405 zcmV;G0c!rg&jG;C0gze&n2}o{e|(69=q4BxKN18rqF&9gJ3_;5ySCFc{CiuFB^o`b zS8kKnd2ilJUfQ>ehFzA5y*YDkqh>QtQ3a$C>#S+%)sc#+o=BV-%!JrO$6C2;N=9JJ z+Q99b@^kKWWGr(}hRO|Q^q?1{Dq^agO3*B!a#4_CTM?qygVQ`Wx**Uwe;EuS)eOyo z*dLFn2ECpTD_N+YKq(dhu4z@}q31c;`F^QT3vOhAOk08|r!P8|7WF^XqFp6+ zm00!QF8m^o;}H~Otken)e;VypyVK}aC&(~#DYUxKI*txH(cuw1J`5l{*F^Q|ZUk04 z6B8uTvXN8Ao?jC~ED-LUVwq6{w>hcd`Sk{X3sp#?RTfMSpT^sTZl``G875@B6L=bn zb9zCSvS-9Pk!lwC>zDN-F+w$SIP=;*&%jrd&C$7%+U+t&j+R!ci?*eIo;anZRG1ko zgg8O(H2Y#sMqui+f!g2;pez*EL>b6bs>;9swL8j`bq38l`wbRj|;V0GgM(!pWQYc^)8j4!X|^vy@LzM8V3Hz`jsp6?=ptGuoH1DH@awYJbq@ z4$RuN3X7)#MzsxpB7rm~WM975d&_T4yO-X|O)SL$=}rle)l@lz2Fmbn4|>VCiqKSa^YoO9-84~<1_U7oR%m9>S5JDnm!87%EYRnp~4(hL);G(@9wK%NU3vBHyyL=>I@qDM-Fu^ROk`yJ+g^rZgKVZ2dUNj`k3 zoaCtAAsUw?t%(>L4B+KDh`hp$(-IK4%27xd3>e#H0IjQC;rP@1w)BvO^tx{=G%GSM zug#FWDA5ws;Ve_CfIF}vC&R!WPIXkBb>*lrL9lkkurJiCVvkUyTDbx?MT0P2?Kis2 zf?nIIuyAT%P}?AXVn{MV>58vN*GCK<@v|A!IX~7-nRV zqs2wxzr=xp2+u)Y@GJN~`n z|L2ZBgm->1n}Y9v5lX^o`>cD`Yxf&-v@mfQboEkVG2e$ zoe=QADwfWAe3MPEM0j*E>{bl-1mUh76!n3E2(c%HG* zdPl}GQC!G0_Ub=c7i@|$b(nf?U-_-SKUTkc-<*8_n3gyPE7WDf004jhNkl4=$JR=wwLNQJ94`m4)9B%$JD(`D6I(%3aY9YjGc7o!viX} zp=7hyVL4!Yo~yrqvW}6aYuUX??M78}vEY@_vshwTA}0h`%NLFPWmS^j&Ld4fjd&V4 z(tW`6a4P@z{x9wQBK;4pS4)hji%K{ejE~2sgOlExJT8L9@fnUr#qs-Me2UjsGfZ#} zy)PF_bS7BAD3$Y8Z6BTHu%MRkGOkwDT;TVH^!1Jt delta 463 zcmV;=0Wkj0L{5f=c*;o$2>TEq~fEkqGR5gyI!i>?#bC7kp|mD6D5$DpFm}?RkB_L_ zmXgh0hvk6r`Ca{gg>{THUCZuOYB#E)iv_QYp2rf)5;-BjT0U#+FRPOLdLC)|X~eV0 zk?sR#$5Z*g_kU^cm+60SvtD6DT~xx;!P)3+Jec%0h0X*k7^QOFs@;>*9G27)Ud7d_nhX5euwE`c9|Cwmp<88*u2Ub&+x4%6$+-VP z`FI*Ob#=Rj1>aGqe5?>gDqR*){bTjakT1dx4yBq2$au1Xc<(n>TW2tw4i$m|Y_#bUd@kn;B(FUw}3B+Un~ z55SJ+jOQGWkGQao8|UX4JD57BZFG33GcH4<6|4E7#or!fjLk&w)bKfD2i!X){d|mu z@z^N?BTGLul@YPfgoRpi(&AdzfLlmT;6oUH)NU3iovks}>A4w&YNN-^ z3>^`V5uSyc!qu=p0L_Ki~0d3moQ!Ko&CHVYY!bK1^Gw^9h2gCtBhYg2x4MD71#WY)S@$q&!CL-a;GHto*4Tuybadn3l0M>!}vzQOl9}_=Q;p4av_Y8`Bm*c_FfV` zpEfUrBWE%}t;Zg_F6QAz#wrmqjcE7p&2x6kW$JlKwTbQ#6jakT1dx4yM`1?5=0OS?vU0Pv8AMt9Dx;6i3tobR(UH! zp5l}8@r=|;u!^cARDaL}tRm{W@LxjlMs;UWE_}QeAr-`A35yi~@Q)Uxv{3T>lb`_^ zR;f}N?!gJtngKm)KzXha&?!ngK~uMwrh(bmFT+=m_IbwbtdS#2swFfJmv38DiAy}M zkcNb?t3s)(#=pThRq;Hum@jV^{Z;TE5F_JO!x3{Sm3v;34+0!UDRSv`eM^M!lw~&v zuXa!EZW5K3FkSA0{k$G)4;?23`A7#Hlj3-*jNd#6Vq!oQ*ZiH-qBDsvpk5^INd2!o z?@03oug8;d0xy4l$T<7qAL*!f7w()5!*|>|IXXFQoz;ijLD#2nbOuLXqvO-4eGa3? zD+tRCR{z<*1FO6tcS?fqiLnpE+hAS3;4ttqjBgaoRCcd#*8#YZ3t^PZuWI+H_nL5a z+PoBwoXG^Wo_g%Mn1>q~t3=3YM7#fJp0hhHr=Cx#HqjEjB1?5>cC zv+>_=wR{NC!(R3#r%8Rh_qyH-1Lx8DP$+S<^uBaSyIm^OvC_&+(RTDZkj|)?OI%ni zggCRpJ zZ6%776?)>PU@<(k<4r)il!aPTQJy{~UIUznDdt#Co<65X;PcI#_K zfy%?JVWAr!0sPy4N!lZGxY!wZ27tKfb+m0+$<2*T!Bd z1r+P==hrsJa!wx#BAssz{E-do&KhJ7fbYjfM-vCUAA=|cyG(ut>@#5hAz=6MAMSBF zfr_k??0BcuJ?WmcPU|!DFb*2J7trY>C*P9p89Y8*L2NgFME&M|0?q`>smPh#%6ag- z-wG9eR`e(KXwtvFm$ztP3$}to8*ZL0i{rK+E30!V9T^oC; z6i}?cpWoOV%Q<~0h;+U^@JBXmIvbD!0KOj^9Zekaehi`*?lburu+M<~hk)J1f4Ill z6e_Y#vg2p1^Uis%)vwRd!z3u^^r7=DIqN0e3wV6Eg4k|ry^%|D;L4@ zenU*KLbwmw%YqWPElE#Czjg%}>q=Uqi}>ov)9h`a-)sJm9_D0O2|Ufjh@LU9+hd)X zTDN|W`4n~tc>XMA`$_RzUtglOeB*7&yR@$XIGH7M)oqw1l0KaM2yghniw8Wc} zuwJ_DUZ$IOIy6EESqY{SIUE<3Guvw+3e_X=Pv(p+IU!+)Ga{9R^}y(RQ~&DOi|`v( z^BGoTtkep-tzM^h)f&{7f^q5;_J-K)#+{qEcZI9hF@|;n>W_;VTJ22g$ osq)xQe`pS2CRFZ3?%AYZtUcEpd~XR~d!O|5vsU8Qv&I20HI;y@dH?_b delta 342 zcmV-c0jd7=ZS`%Cet%C0Zh|3#njl0X!YwJguI+RUZ*L1hgFb>cO*3=OH>ZDUM%WF?r+@Z1*coEyChiX6{s=d(Qw;3})E`$1wAz`(lci-N_l~{4 z0dr9ad~u3pK}s<`m!#&ir%M6vRV9s91u2I4cKIV14w`q8{rZegg4-p`=uNnsy(7`7 oR9Wn&KQu?M5Gr#b^K4Qu)t+mPzPE-id^+^?h($ diff --git a/docs/sequence-diagrams/puml/d3operator-set-treasury-account.png b/docs/sequence-diagrams/puml/d3operator-set-treasury-account.png index 3777d5cf40dfd0a77f528374909fdbb6e4ae2806..8d9652d481cc100713eafe7bc586a702944aeea0 100644 GIT binary patch delta 341 zcmV-b0jmD#ap`f8eSiEdXmAq@5!7UbNJO|LWw*j4?94hpYj}HSP&CLRcr%%_Jzq~w zIx?2Db;TZPJ8MgmwA<4{~M`qUuRzyXXzxd%flU;0rDD;l(3;#Kv(}LSzY{W7TQNidZwSODIJY30g zHpPmy5lUjW6?fvRR=>U=i>Z?s53t)!IyXsth0E75hIRw$kMk)S<#guB!dNXf&U$?V zQmP1Fyf0C3f=SOM%XIQ|D&W1WgjTX(?>k-1eh04m%{yUzl-fJN)eI*5Ms9DtB2&4L n+r)2wXbxaXa_ea8*(_lk0?-HFTfis5u>X3nr}nY4!~rEYz~7{gg$cV?X*3~%oYiUxTEZzhwr=j+Ky z$HtPjt}LLox3)4#t5p>wL#3IivSs+)vCKHm1?@DI05x(}Nmp)J17%iej3!E2?f>L8{%r({a3!nx z3=gc0P!c=MZoAuW4(dy?n7RVn18mk-3e+LHr_)b_KrS?v6J%=g3kt?iMWGWYO nm-y`u@epPtcaC%BO?gFRo0+4WjTTdE66n>vyal(s|1{I=>-IRu^vyn%RB#PmmE;7(lU&T1V$Gl=j}kpTaMoA&1Y!IG?=z}&$snImK3|8pgvd!N z^wgSAt*z*l(eN&RnlPtvMOGOZuN7&j^mHt#AfN0XVN#fU&KazDUQ1#UtbUpRpH!HH zO|ErV+vb3BAn6x|!h_w|5_C^F)`*yLL8wEuPkSBjhJGj91c`Zzy#kL?V+EUH0+ceo zyZxVS=PHB2rmLfh`yheX@lP!-Blw*%y}*CL$X7^r2ZoP-q!*gOMc_y5G&k*@=tL*) zvFN0ge%sHt{e0Wc|7|~S`2RW@^dZ*4@gOyiS|_cuqtnA7dguiWt#fELvy%^5>kLMB zm%#42IQ)9k2WNuK2_!41N#H@OiykfzZiD6-%iw#Q!`{`mtpU1vp{&s*C)v9nJOJLG zHZGKhAzAJ$$o)WEZ6>FybHkIIMfER@bJ0gV4LFV5G1tqu{oXF4Zz%o(8FZo6+c*Rv IvzP*pv`;=B5&!@I delta 570 zcmV-A0>%BO?gFRo0+4Wj+in^$5PkPojCcvC;*u1hbX6*vgjS-EMj_;-s?e~WE*87? z))!R%zBU&V5|Y050ZS{bXU?88S8dN&)YcU_JDXcunxxq*bCki-NLA4^^xKh4sm=vv z8VknG&{-v2F(b_|wMs+fvs@`j6;^sGk&4oP50!h$gs~d+Gy5%n7WAMNBwyf-%9rHf zGvy>ly@E=ANz$4MW8E(F|CB-#AaGTnkkIWiwo``sr>BAm&>CEoUTZo>Gbi)oXDx&) zmS_ngl;uj5a0^xxWEl7pU4b*knm|DoIa=Iv*4Fq43HUwl3#xcYAe~dX*o3$O&q-@^ zrj;udlT=L{vg~4@p-eO0#8y43OdFF$hm(v z$3NT6RRW`JS0`oY0|yF@e`6K=LB7}z>G&k-Z>v?C` zW7dl+ecI2{exCO8f7{Qy@PD0*hT!X9!XTYDE?O7uMyEPP3j>!!s{^eM$$2|@e+iR^ zYY6TdtA4#3f>BPV1Ux8+nG1thV*^|w+&dX&EP?NS4hJ{ib_VFnrO-+iA<4nxXbsP|Um~`kY$m59JY$vBLQxzsT@#R diff --git a/docs/sequence-diagrams/puml/lookup-account-name.png b/docs/sequence-diagrams/puml/lookup-account-name.png index c1a7430dd610b6ae6755d7521126503b0caa7c45..0c21efdcf3dc34907f50162b72aaa90f5400fc68 100644 GIT binary patch delta 274 zcmV+t0qy>SNP|d_d;@(&Es=jPe}{D`I3NS5t6@X0j#yGZSE4YY0_X^5HM{CS286WQ z;1wS=6V%>FNmY9_o^7Zl(-3Z`(WNiX0FneVtzTS?LQ3sCi$z74Bmf@{*uOj>jNfV9 zUKplYVd<3lZz!03E|$|@QkWCxApn?vXYtPtTZfPCRv8A0(v0IlG>WE!e@S;MET)bz zn&EgHk1pb9io3@JhIS9Sck2ur?TjSMRb!1hIP3L2NJT4f<4;u;#rRMYr_1{<0B^We zMsr1MA>FTj2R>RfRV`{}p+8DxSBCkpRP42zJdIr`of Y-T*rk=DOB}IFbMWB1B0SNP|d_d;{r=s*!&%e+G3aI3Rtgt3gArj#yHZD^VCx0d$13nq74u143GD z@QRO`32JYoq^i9d&og<0 z%4n{LEu{O^4`Diqu9d|t8NUhcSFoff;Y#ZjQs;_`*iXNWW{?RkoG83EF)Tu+=IDD{ Ycmq4H=DRBRT$TU;B1B0Y`85WV|XjJAhBRUnY0N>?R9`Dj(jrV#{Am5}k8#p>?Z z^#_Q5-|>d>k!vqK#HZEFyf<&&jCSBWw?0%QJ6m~gT-xcFl4Fdtg|0eI{tgm_Y~_j< zmRF3O@!&OvY9TG-!fOjtN1ujhlu(ASkmMI_ZcGB)L4E=6N>!|X{Gtr>PzM7e<~lwO%q!h7M21theCjq)p4 zD(*o9OLbxk{XSz+Dzt7$RSM%8{df%fiIH|e^x1JZ&Z*YiOTsZ4Xh&eI7Sg$wHimC2 zQn*XkmgMpnx6AB*hfaa#mBKl(lp2dUb)MTgDQ#mW#pl|BS|l&O;ZomxfEbSMWD0#9 zY96HRi5bub$r@juM&NX?f(T;|wFsW@O*Z6f4v)D(UgiNpKv ze*^GWv0OMy5&lpFdQ-#q(bY4RK+l@(NCwapBQLYM4z07!<@3>P7sdKKzjmhR4S}}ZKL_F zB!&BQZAm6har?}FVdxlmR!UqFOQA4dQsBK=ZZP>bZnBd*oWCkWx-P9o9O zq2^KAftUfkLMctNIT_@`{-L5eRgncJDrUq7>q2eAw$`-HGg*yhyM_z$C2$_elYbyT z%=wo60DbkCoqBj2@Qtw}f`Eec>-2>lM-R*Ay?iJzRAYC;xP3XMvdWz7C65D z{x<**SV^O>-urlw918~h)~$3f6DIhvNZ7qtb2?K(q$-n`$JG66>zYkC=AP%oEs)*O Zu{*P)+>HGR0ptP?<$Qk#2D5bn(3Zq$5C8xG diff --git a/docs/sequence-diagrams/puml/offchain-multiple-purchase.png b/docs/sequence-diagrams/puml/offchain-multiple-purchase.png index c384b69865768c2074f8e35754769581e6d01542..42ade196c398ccd5bc06771d5d85e0697c4a3c2d 100644 GIT binary patch delta 730 zcmV<00ww*9{R5Bv1CUyOzG+lgbZ~58Zgh2RYybfO004NL?N&`s8!-^Q`&W$814(HD z1gPkWAOy5kQ$i6CPL(3ZJ0upnw(F0S{QHiVu-WCSaL=AB&%Bv=xu@{Fxb zy*Dn|*f1Ga@unkmzTxmsKqau9N}Ei5Ig1bCWDHL}G8+U7Ni{m5+~mH(k`^g(Nxw?r|Z zFVoskg+tFdE*RJJt+7p5L19C?cLF z!OY=1dwlT59^Vx+e?d8|FSh8nQhM>AMA+ZYi?!O;D^e+Y?)>7&()2gSVUG4wIljwB zEEl3gl%|(|dK&{i>g`K!7(MGf{m-IQHoRUCF)g-~)o4cbz-M;)kx(2GI!Z1(EY)`< zr7J0|B3DwnlG2rwzC%jS<6rA=a0=9O7guVl)7|Xuc6OSVq&WScpt}cKTgm2^q`M2l zt7C}f7HfV#KLw|Q6%;V$kmC@?p~d=q#^EBU_}U3f{Gy5IpZt8dfUjyMtyYDO^{)p@ zhtE6hBkAE1ZCs7(0XxAPP6|s1q2o*?l>J+KkDYQg34B7asS(Gd&fd<+cFFz$QQ@Bb MAH#k8vmgU*`_(OL(EtDd delta 729 zcmV;~0w(>B{R58u1CUyOy=hcfbZ~58Zgh2RYybfO004NL?N-}P8!-@l_g9S42a?i+ zs}Nlggt)Y7N+<%7r%I9I9TJOO+w~Of76y)gj)uZWAq`=nk?wT3 zF%94j(jEAe$;s4@vw(H4E1XE@Ew_#O{RPkQM&F@ou(1v*<#rB@vl%My8jN+ja2)24 zhs;ZpAv7;q@L4!xK@rZuU+JfCE4c>|tfkuL(Cso7i-h(e)sqzXiz+A*ku&a*%#12t z_!+AOI`+Z>`eh}`;8`5)?5AGVfxOB4h8 zGOZ0&=w+-eUXz^Kb-Hd)rBY2sDQ4(@A8+9R#+ep(k!UT_Tb#$i zs;7LbUyXYOCo-g17M;#!Gz&aU>FnNyKaO1j{Y9q-Cels;qv74TW6j{>`Mvp$BjR}y z%p88O$A|Ci@qID#SCrHGVvBw&r56uMg#E+3SgUQlB9*e2&aaLvO@DJ7=4ii^C2d|{`b2*nYhqvW!qQhira zx{}f=awVlJDP2kF2c+~e{}+ zHzyFyE!O;gc@9noD=1*hA;%$(LyPtJjKft>@wF36_(c=ZJN@~10cUC^tyYDO^@jbW z!`^QDSbDfd8&_l4XQz0}Nnr^gbeyS#vVUvuvvaN{flnwlHR6QS+1okUuGv3Qe4hSw LHd3&&Ap>sva;s|l diff --git a/docs/sequence-diagrams/puml/offchain-renewal.png b/docs/sequence-diagrams/puml/offchain-renewal.png index 8903fc7be125ebc18f04d76f19f50dc4a09e6d18..889cdcecab7e14f8443f68ac3e85ed49678d3c51 100644 GIT binary patch delta 610 zcmV-o0-gP`l>@Ss1CV`x1PD;k6+x)bR!s>YzD`Kd#5-&(c5T-mf&Ba0PFOaiYOg(z z)5Be>8346S^phg!D)E#y1!t`x=8O-fIzS(j7@>kOKI*6RBiR&=c%NVeES zd6}b`L+k5|q_Zu?1_QV-s#LOo%9l>)lHfhJ+JFo=a1m(XQMf7G3v|G}F+su{1_QJc+^6rwEfUZ!cII9a=>rg2^cBFpeXdQMH?GE|Gp0P{-7v0jjF z-x5Da>QZ|wf5>}(b=Z07T>}|}U#XOaGjO6Jn;zjBYNvZflWSVkccX(QQJ|pAO zc$%TM znZan8bCV!BPz?Ob|Hj^|5(>K0;Mt1sxRmsVHF>puM*$rVnjO`*{dTBthx&G?|Lvh( z#DCnI(J2JSZ5-ovufNsb>+QC$!Xgj7g#JEkZ)aPdv;H33TpvRWcUb%T#VJ_j4G#rl z4>9p^+#NPl#2Lb+mvP1!oNJQ9lb_EI@Kw%)Q8Jy!@OJc)@M*XEML4)36PUp5h@H?q whSLoQu5uxZEOh_Y-DjsL3y(#p9gH{*r|-->#ID$HEgi_z4ldpPv&{nK#}k7tp#T5? delta 610 zcmV-o0-gP`l>@Ss1CV`xgij&5A_x^|)sz6@>x2|J-eF_0YrFnP$iMH{3Co65?X?GT zT6yNpy!U2CId+~~AF7gVOuRQP+uSrISMjAMbhYX5S3o7On@e6;UNN@8gV!olW3-G5 zuPt286nz`2BZV{shE~4Y|){=xd^!tn@ zuFyRqS{YoU!dU|w^~fprNKr<-mubdofzB= z?@=5kb*Visf2c=)ebjmFT>}}=uhiPW1$bGZOAmE8HmRM;phC}c?s+>Z8BMsGbW(nu zvO;RTRD-XWpm+j&Hqvr0wF0V(3BgO>c>hEjA#h~SN}a_))5h`2#s>^@1R({I8lF`cazqXkGnhAb0Ecg%`Dd$90W$iyGyFiNb4V*K=Q% zGK1kV=Pp5Vz!>js$Apdt&5rBaem~UrLw!Hg|MpO? z;y>=)@Epi-7st5W+u7RL>+QF1Xpsk@gspwp`jTz$WxEG(cY6Xc++pqSSLfh#u!0K4 z9&#MwxI1iAz^5FpgNifG;L@NPoc?@yfHO6fR;zR#gZtrY!v0?OtMqV#mYBf(ke%Wq wr_&{b(79AaM%}-457;?ZMc@V1CL>Ph^u3)^?1udYEx5?l7mYN*v&{nK$Iz`qNdN!< diff --git a/docs/sequence-diagrams/puml/onchain-multiple-purchase-prolong.png b/docs/sequence-diagrams/puml/onchain-multiple-purchase-prolong.png index 3f460b19e41db3763b881d264efbe67792b27630..92ca544356a9c61ca150d4b02d41612aa15f0017 100644 GIT binary patch delta 653 zcmV;80&@N4_57B#Pu2)H#tgc8jKAFaOu{-Wds@}K11pfE3yRP zeP}WblCljv3%i1=>39OxBf((6m>&Q-=hSNelOpxLp7SU@=7O+Cb+eyd=8{9gLe@e=<3elLCi^*Pk-wEGb zbg&`z)+I|p-Uu*%8(wNCfUtBtQJqA|_?1c@fx7u9=NNu}DungQ-WR!4=WXz2uep(s zwlLKgEb*CVJy9wn(OBVi0k5A_6sL%fdNWhPgJq(g{o`2D>v`KniIbj@0KR1?hu2>>2Dp*A&`K6M8qP;mz=xC0rLZtX?P;5j*flOWEegsARU~8_ nQ1#o+8N1^$c049*lr%Bn>NWYM>=zg%MM;rPpRNG2>jHcD(569Z delta 653 zcmV;80&@N4_5TM;)-4Lk8EKtM}lnJ7i7 zT$K9nJ5*vxc8a1!uhxl}<;~3F<3Q)uapQa@+0Meb+(vtQx#TKXda=&-EdKDQV(cb@ zr-o;Y?Qrk3^4SaxORx!5wNvvGh3d})@LW#TUeDhR6%Tfw6wvqE z3T4D$r|!6hX7zEiW`Rb`mr$$*z@ND=+zGAhKV$_qxbp`8l$0ACqqVOWlfU-95x%pN_$;t4wa!U2P6S=R+ov?eY2u^V%!Ke@F7-=z9CLa-@4IVvdL;&uU;=PmVfeol zs+l)SRQc;S)0AdC@jBDx^KZm8ve`Km2+M_?S9@l=G`34)yEL{-<1d!RDEx^$4)20I zEGY;MdWZXehsV8>_JlhacnSL_u>UDKIF61^;ql=Tg1f`oUq*LewKp-njZj|9d{AJA z4S2y}>{VbSf^Rvh!PVE50j^acj8>(N2Ge03aB|$e5Dq420&UYFyTUoAML`*{PJ~J$ ns(#ZwWp`Yqo~MM3iY6vpvn1by{Q?-kMM`w7%oqT(>jHcDpPE12 diff --git a/docs/sequence-diagrams/puml/onchain-multiple-purchase.png b/docs/sequence-diagrams/puml/onchain-multiple-purchase.png index 739fc72cb41109497203c703ea13ad978c03aa36..e4530604e617509db68adfa5246436cf59d89e97 100644 GIT binary patch delta 812 zcmV+{1JnGA$_0(e1&~^Q3u#nXbZ~58Zgh2RYybfO004NL?N?h*8bK6(pI>o8AB0*^ zQ5(A{#;COk6-z*TG9kn65hgA(+qqEbukV>f_JTOx7YRUD(Plo>r73u853rQh%=-l|8G6*f{%MqJOK@@%P7fvV-5fK!28v)K=1O8Tf=N|FW2*w8And8$p=J+YyH$AecZMtOcrBu%arGOXf3AI+b z?2(Mvy7#MXE2OQ`qVcw9`d;Yw~_tD%=H=kycmd(*ZzZF|#ywl{5i)3!J5|GsHm{~tH#T>I5w z{L~#Zn)}V;#!v!lQW@}OgCx!u9FLVKB}J!3w_jndhR;x5+68SG(v>Rw_QNi quj(fn?3&B5<73i|e&3T`JttnD{ROpX!)Q}O3%rAD1Gj7g0iR)XS%(Jz delta 810 zcmV+_1J(SE$_0zc1&~^Q329VVbZ~58Zgh2RYybfO004NL?N?b(8!-@m_pcbG4}{W$ zQ;4n_gt#iDgd(mdq{!JF5(}@r^^ubP`i?hbj}TILtdxDSX6Bpw&>mUGjq|BwYa{0} z8*Of8lB+;z$2#4#_{*b;v6TouG(2T&jeDn+PX}likDWGfXX%-Lks1+;jIhv1cH2D5 z8o(_iyYNYh;m8f7$GX&sR?cWC(KPCeYa9ye44NWegdhNPGl0{b8IsMiZB*_3paw3o2zSZ0S}!HW5I1`9g>Gp4!m592tkT5cSwSa zq9H^;MqtHIVFFiwe3Fs}_u9uJ%0q%x`NBvUYXk#7Y1UC+g0l6}QYp>K=e(LR8u2)R z@l?fw!skpF?u1q!0EHm9^9Gk-GNWU(cACFz>iC@atP0UA9p_#?3gRY!y^D~K1LWnLFqA&ajYSO+LFIPQyF7FqmXs7k)cY2 z8uk;E=w?*-1_P<%rx0*W)3Ue+-l#<}FO0o{izSjSgH}r_1MnoFw_Oe|yQlY(?Yk_5 zJ!_u#+73Q{PY3+H_KpMMwGosSKbYggcjovx-#6D})3|)eJSe4K3Q7S_*Ap6}P2D4v zuto1T+g2#oq(u{U%dCaVA{Mh$AQt!ZoWi->zE#5@Skd(*`Lxz2y|NuE z$Wm>6*W}l!B3D7PBQg+fA3G|};OeHWZrbXmt!~ZYx3+W&piuEKxZUGE~S4jZO! zyS=luv)A5l-f#z9FJWsRw!TK&d(rLz+})l)V6U_0_p1xA+MAfxeK0QuK6K1F>+&&& zYp+5>MDUZErhEEhMu0Ol7DlUllXmZWrNI7P>sUCrK@+CuzQ<1Sk<&#ZM65&GMP&WF ob-*qdxEgvsB;6SHJ?S+Q;@z;nwgbay(f*IXgKh)2ZUX_IVJ%CJ0RR91 diff --git a/docs/sequence-diagrams/puml/onchain-name-resolution-wrapped.png b/docs/sequence-diagrams/puml/onchain-name-resolution-wrapped.png index b731191c4033f52ea397fd5731fd73c49669d99f..1b1d79bb32cfe94f8e5912766484aac595bbb951 100644 GIT binary patch delta 482 zcmV<80UiF%^#RWH0g!!v?bt|)RDcVkNm{_QlORrVHE3}y6P1=KMXK%Jmy{oog%;?s zhv-CbXJ=-Y15GO{jCDm0XIpE_Dj5#TTyVG9i1W`DN~ilnBM9Aohax@e z3k6Ake2sB|bl0V<^WEeR-H;rJYF$Wsp?sW??Z@%tS5l(XmwpC3s&F&u+dR zF7TFXWi%JW7G^JtSHSy={wHN|NhWOPWdS#|5zfEIEvH&4&JwTwxqk(7!I=}8=O*^K Y^}ObnuPxy>JR~0wUSgWbvrYnlcws{CjQ{`u delta 482 zcmV<80UiF%^#RWH0g!!vA4vlv72v{Xk`{37B#4t-4O(2wM5U!lk!t(*CFMtCp#^&E zAvzJ<*_qkpK-0!N`}KS7aVQ|sV;^UeRsqu^`#P-5e2}Ra8|P`)?}dc zy((3uZ@}KQW@|)hd-yI_+19ReN2iEK%2eesrgwUOCklGf--vsEU3{hUnmimP6TIhs zx)q9%JseG_Ijb~d^uvgAKNaH9ZOBo#^w1+>cZ2g1^;PRNEL@u#Pr}++x#(tSxS|V~N@z{VbIs3FyBgy6HWR zli;0Z0%F;9by(Pc-v;xNtlO(=WcOOT)*a2Bbg%SpUb-wNi(cx2A|a*MuHpvTv3_9e zLP63W-yD8c)Zcy{yk zaDlg6E2Fs}wlI5HyaL9T{ZGo`l1$jn%K~m_BbqFf-@&F&rR%e Y>v_#DUt7X&Jii|iYv>S~vrYnlc>Ejla{vGU diff --git a/docs/sequence-diagrams/puml/onchain-name-resolution.png b/docs/sequence-diagrams/puml/onchain-name-resolution.png index 3843afdafb10ebe666687c00d408580009e62ae1..67c7530c297d54bd702ec55c460c1cb3a2ee9bc0 100644 GIT binary patch delta 462 zcmV;<0WtoS!~vDW0g!Ni!A{#i5WUY=jM4-4Aqk0~qE=Hy1zIUh01@DdCicW$#h!K7 zyAk|-cT)_u1YgklGq0|oWQ>pU8Zc4{}#uZh3r*|xWgFb%CjV||W1^}}e zUdu2oNC}FkqX{`@l@^@M0KC51ljTl3=yV=_>vl=7VoMoWih|Z-K}``uhj8G(3AIsx z+c?3r;B<%lR4en0UW`BB@zY<>yljJ%Wj<~Ia-&_1n^LDctNc!1dusjhTQ8DUC)&EQ ze9Uy^Es23ji=w-Ku57iF4A6gVX@9IMEez}_@2A(g;^<}4_`vf|5S-5V)$5iGF!zLT zEHHn)oBv1f&mO@|_*2}kmgohWFveswJ)WM9PNFqgTsXn$8BQk2@t0(JiuZTt7}7CB zKW~=UXlGK!Of}Z1&0&og7PKe4brKv(@VaJMT>NSQyp+8_GFmDY3yX)<8{zZG@Vm0O zW)oI>SiuEv$$6J9CDoadJn`Ls49{Rmk~_-1Hj95juWO!tZVi6`nFX}}1}%w(vn>MX EU#=eL-v9sr delta 462 zcmV;<0WtoS!~vDW0g!Ni%Wm6147~Fz2=@@_;73x!NQJsEnxq9>I|*MOF2X<>=0 zu6B*&@4M?pi3GG?(CS1CheL9f(4w(qtgA{mDXguVWIV1*l7Ng-U5y+5=~z-8W{Pq{ z6~GBOtHo7YHc!&$yZCN z#~T@@1t~%CbTlF7tkQz>Ie^z!2eRC02c6EtFWoK)R%|IFOHt5zDyS)9=n#(lccC^4 za2qF>7M$*ppKE1a(2Mb3c>MeuG_TtrWtoo~fZS+TMX EU)O=^IRF3v diff --git a/docs/sequence-diagrams/puml/onchain-renewal.png b/docs/sequence-diagrams/puml/onchain-renewal.png index 9013630e28b0a3322592253060e0a67a72aa0e79..c5cd13554a773ac7c2cfeda9fb0b6af19318093f 100644 GIT binary patch delta 691 zcmV;k0!;n!-URX91dwolO;6iE5WVlO7^Mf2mIMe;QLCvCUzJh{Cv)p~~1SB|C{RQU`l`GNs%{dZEbnH2${8L+nP3 z#)@Wy>`-e2x7i#Op`j59ZeO_jmX3#oOgb>MqQf4QvISH_bO@h+QWhs>o?2YZIv3n1 zk*26xs|OQ|nKp{9$8Ttccj6g&i_C@P5mgIlUFOJ*ZV@sVz}V3V9z$kR!(@u^In+`C zcQ`N}sNsc~1kR`9Nf`i17nvh~!GMrr66pSLO$Tsh7fpDD^HZ~&8gyC2P3O`JTmYKI z93z+@#}}H8OX3HAVZ+4f6JZlqm#RewKzU^QulQZh-l=QXFj9Z6^W~`6(*p96;*sO4 zWQrOl_y<6KDr&64cQ8_k5VbCKeN%KTeR)p-ybX3`(j8v)0Q1%jrg5&zqQ#9<=hvL`{(!?w6H349^&h>x%Dg2Aw!x|m{{)jAb?wme0cF|8GuWk zGbMQOD2ETDI^pY4_ly~sqH>+U!-!nq6Lr?<5TS?|j{{fzs(V7NDUU6U9XERGa1Xp{ Z;m)Sy55gMzF_#VDor5L=wenNsc}gHU998h=~lA@(Ci zV?{GUcBnOi+iZb~(9j44w=dj%OUJ`PCLI_$(cyqf*#W8{I)qPuDT@=cNG-Or&ILD0 zq$#RS`(TPO(?-$t_zlhQPCO&;kcF^3qG}19%N)7U9YTgfm^eDYW5{f3m`o8qhgvG& z4hO~qHM}sB!1-)4EdwCwGIInl91>DY0{tJZ=>X2`vI(znerlFegD#7>>0Ek&3qZ4& zV+2#=_(Ic3N&FyxY?wHGB5dO7Qnd&HD39#^6~F7*dv)y^M(WRXz8n>MT0&k@JaT-M zOi{xG{{YBOMU7SX4n`^wqSmFZZ;Gy^ukI;;x52J#`o!F61ekB8S1S-eSRKq|dA}=( z{-I5UCDqp&rl$`mX7$eZ|i!Hbbo zKq*l+h&+0CW{qZEJe~RG^t<5hrHYqYRM%2*Y)aIix6%(@DZ80lFVgre=e~ff_UJ$Q zH{M~pAvbpnaq;b?X}q%rvZicrlX(Ikf5iVsy&qruHPrs9zYY%e4~_=M-5E77vMKBz z!~VD6>rrrc0{3_4;E#Kx`*U&)T38i25ApTc!uplykrB-)OfC0&5WuZOKDzj|3cw}L znG(Esl%t1nop5~AKVt@Fs9Y!TFeVrHM4fdyL?|N0YtEn%417o$Bo`P5FD>s Zy0aPi1H!fYG5}2IRf8r2w08Zi*P`&W#(BsuUY zQl+aB(UP<(g%m-^rK%!h4~xaFz4Zqo|Gr}&A%tyJ^~|0u&%8I!Z)UVz=ehME&)C_* z`@$vldXaG*Z)(Eib%(zKYJpX$cxrjh*clJr=#bCQGA_KaFm-f)EQm%4RS*^`V{|49 zUKtG^M_(&!X4cT-u0RWSM&e=e9nbOJEKvh#@mMLLS`ly;L@j~nSf>NK5NINRPKU85 z1gh6Z^%JPuUG6+&*`qW$S30U!DAw>^91|JvPEg(nF zCHI^iq002J@`6WyuMi6qOTcxZ>=O_@GL~8s3YcX^EWIKdJ{*MqjTYD5k{4i~t>#kF z+5H8+Z^)4guN($0gbCEeL&80{)C`_^&}OSR=L2xBFI{SHFI zQu>H3q}6D=D8tOr9PE9(e(huVK9k4z zze%I`&zcSgK#sT=Z`N9k)@7}IKH(nvK||{bn$4u~K51RT^u7l%e8JAYj0WILumV9U z=dGG;_%B$WuQ-g!a(Y7o-wV|Jn{Uq-aI06!8l9u|tp70FC%kJ{KPe9rw6Ql2Lw196 x9;gquS{SJzbed50&($k7;5rRFC2rKL7kg`;C^lig0WF<}V1qFhXtQ_%$)L{41eO2* delta 560 zcmV-00?+-x#sa~{0+3pN6=_shbZ~58Zgh2RYybfO004NL?Nv>0+CUJ!@2?nfNpb)j zico5mh?b;PDWnKOE>#sRyMtL_@4EYe$iMFxNC>f8RXyX=YG>Y?w{K?Tp7Y%LkfrQw z>3#0vW;0K@E^ZpaWKD;^0&0PEsd!>}#@HDT-sq6c(K0T)u`qLgbj*oH36&ETY7=xO z4PF@yAID#7Y;HEt=PpMJcShoI@*U6c-mFjqY4KRApjs1fA4DyI=vcQ4`w(a%fNqzu zLI~8aOZ8)D+I{XKr0JtH8CSYcuhv9b*8BEiOZrx43_m90J_w$sKOsR6z6d@pxm!Yp zo=fgIE1|0NvFd_FoXjKQyG|!YhY?3t<9v@tE)ct~7(E9<S1E7}`;rAi`KlV84gZ zuv9)`2Wdsoi!w|d&B4LP>(@S355%GFw(&av?uttM^Kh|$9%U38$9gZzciN=WCY?6v z|2Jt|{Ih1GA&?`kh+j5ZQLEkPoKLxjK}aF$K=eMoY{&1eV0Pb!B7DKlzl?|AOt1n$ zD(9`5Z}~6SfUh}B$Z~o^4BvCqgPU*97jUcB${L-a_H6JlIwW-3^-s#f6m8L)hY`EM y1rOARTP=(tR62>N`sex;8*-flo)9-`)-QT%pC~qEzX2{dhhcLdr}49Q0?DAkNDS5h diff --git a/docs/sequence-diagrams/puml/revoke-controller.png b/docs/sequence-diagrams/puml/revoke-controller.png index e0e864f754012ec7d83ea32a34b26e47d7b92a1a..f4f3b866cf7742a0fc3fdd25ed81b8ab03360828 100644 GIT binary patch delta 145 zcmV;C0B--7ewcocegXl5k$~iXH+!`uGdQ&Zy94ZWy!MUP?c;hi!m?b4+T$WXEvxvGFl7b9&nXnMYTnG7w=+*3StpG1WdUbf=PH}_dQ~AfM!LB!dzOBA;+#5CiH#8@z?tw) zvoBXnFOjpsB%>W7EEr)>Y_dge-kC$>Yv03th8q-f6Nmm)0)`X z1YkJCB{>v%944e~^sP28iX~v^E@>UjI|&E_FW+*ck0A%tcXzU>JRa9&3F) z-`y%slAbr1KF7RMn#Wtg89ILTHsA^nkp&9?-lWE@^v4;Dc8zqE~Eb0{o+r;`-{#e<$_a9e9ip=CbSklIAF@T qmWnrN=>EBL1@kZhFE)Xj7{<}k<|$xH_zg`a4Lq1#p>MNW0>g*ywCrC1 delta 501 zcmVo&7f67Nvgi=dXs6Z>x&_*H2sgkvL2Uyjfb@#(b{(W~H zpb4nzt*7|1t9dhT-p)LEY@IO9mj#?{ovUox>s5u|80qG^>{-aJZ1ER-D8IpkEd(r9f zXmV+IVL%){D7XE=ikq%Ge?l@w8z7c{)7o%kdi_t8yVU(SU}LneFc(D;f?@OxdaU*J ze0QrjNqXL3`W*94X`XBaZ%86Vm?{O<{a+?3?}G?Dya8cOCzZ zcZ(|ws0|(PynE5V7<7lNrEoa+1@?#7|B#*!()X8mcRRrdx1sgrV)_cL_9iEk$~vP~ zjlwp}MJ@0qI8Bw5;`fSpKK;56;EZc!G?!8T{C@E#VL0e~QZ6{v#Mj&}U`lJ@g9B!q rYpHmXhVGv`mv9wE;Ke3z6T>80+B^kp3BLhN!3{k^HhQD8S^~p|hC%yU diff --git a/docs/sequence-diagrams/puml/set-default-resolver.png b/docs/sequence-diagrams/puml/set-default-resolver.png index 19e8eb3ce778b4404379c882e0aa2c109c157da8..ef772ae7b569fe445c090f99e157866273acfc3f 100644 GIT binary patch delta 328 zcmV-O0k{5=e3E>Seh~~9+++<3Xo8?b4!5LiM{Hz~j}?C$3(G#+L*;`xcX6|s?}aWq zjnrgKM_-^|WbCmzN{LE!u{-@P!ih<*l(b#TuTAf~_ zTU`joiPzZaW4j%Xn5<_P!A-aRpg06<%ShKV7#$~Fj&*9J(z`g^{#ftBROp=-yTA^9 ahT)ai9>UoIz5xW15%JZTzYw#@0ZBaR6Q2VB delta 328 zcmV-O0k{5=e3E>Sei4)q+ysLHnjk2V!!0S>5gT`rj}?C%3(G!Bq4L3;ySUlRQ=!XF zBQaUi(U&KkP+cmqw;}_m2+v0QY)2ME!p35BFEgbh$OB0wDi7lry@-rf=95ByXS|le z9x$2|q}fFPg8?pyQPR8cDWfH4(t<1w1^`DK*6;8PiO~^nkMiwFUOg3CA!Vptt=vcz zg6T2}=jwl&c(uT9@yVE^Kd_~Ta@`?mS>^}BbCmzN{LE!h{-^bPhJoXh(b#TuTAgmA zS6vFmsZX)h!`5xw?#4HLT(3r09@n7yw3wkY-X?@nIksx&In38!Dhh#bUbD(5#@C$m zbo_j3;6xY78l8nmVY-=L1ifzkL2(G!mXU7eFg_=`oan?zrT1~T{juJMnb3PL_JJMz ajKV9iJ%qC*d;tOLwfB(A~O+CceG9 z8ngy{1MfC7|NqU*pPd-Xv~}eX+OO7DCh7O9Ba@-h%T?Jo^yWzB6mh`{%}Rhab5==L z9!LYrt6od5{_ZrDfE%+jx+jrSRATk#-o;{Mj3uH$rZ4opb$kR(jLL;X+a zaze}S$F_?()})P45{JEb5MT91oi($VIf?NYhr?uWlf+lJ-ApmGyU=-D&e15ReKI{AS0uC9)2V>>vKCs&lB9)fxA+lUkD@zaedOA2g1ZIG=!LnX t^^RO|Aq$_t<{=uxoXNtm!m~-jRC%s`_q{cI00rb2`R=-#1hc*YpE&<~wpaiF delta 347 zcmV-h0i^!jblr52aeqp~KoExS=P8EXw7p1AmQn+eVyi-IvGjCXw%IW*B)f4B0pH$T zr5dTefp^Qy|9>;{vom9vwyrFo{bFrp;(os>m<*L(rpmsdS4T3Vhzpi$Rsyt{vr4-1 zL>gFTmB!YFa$&4y8W}HzY(eFjA`_JdHM%W;B*86N^rVciB7ZFuM=MG~FjhNy6+a)c=Hj zPiP(f*nYLdnzRv0;;=UwjK;l5XUi<6uE4`*3)` zij%Y6--VRb3{N*shErpFsz|1b$8!PiWG%FkB}ohEVf8JTjH6p&edOA2f`=6>=$W~~ tdPkR@_mV)}9Q&5k+w}niYGXN}R`H>y3%!0!QzGt zKe&Hv3s|{m75Nt|t{S!y3V`7d=Pc+sxNXB8heLovHSGMvy+(z=meBshr{2N&4ymnT2U!5Jeo9%nG-zZAEUCMu`2U6<+g>&^vC$*v=~S&yI90>m7d&c|7+5w3c1JR{*;Ckm zI$#@8D%GKzt?8D8U#H<%y%CL#%0$CLsi0Hd!EA}kfBp4exy5?KhKYU$n!4$-}Q2V$$!w!;(7mKcrogaJ1Y{L#~O!Y9A1^@qw@15t{-kN zx4Y2!cDKObqOTa04&wDTN}BJ&oLa*BXhjOoyBT=D3TZw`|P`DzK45_7LoH}-@zI|;91O)U6 zxLLD&^UospGtHGYNzBThTBn&`uct95XQ>4;sb~0QkOK5V!6U^J#>(7iNhaB#Vm#1N z!StK#JGC4Uh}0%SX&^}}8ONwf=Z-l>BGZar+H+JH!W=Uh=Pr%)daytZe`@bh&SSKY z1ic<(yQ1JdK~c(w>}tG|DRQpyB$gFV2f3`jgRS?lbpfkX3)~gem!>`b(6$fKDPPO2 zB^}MzHQc6Mh&5^G6cJDMom;bg1X6{!D5pCL@xP|dXZ5%4lZ=z8_K`w&Oss#rtNW4M zkL1RY%-m12oQ%P-+|HV{e^#T_skJK$u3=;dT3u*1{l=r;>cH}20M1=ymABa#GHFzR z5W3lj&2H>fHsU#lxgjkQ^kJGJjfU?B1H4c!l%xbnv(ai&1U$68XQAySDL0YTgbi`a wO{{H3AVWcsZ>zt0T{h+v86H_SlI_@X)sOWp*e}GA*MXM}NOS-Iv-<%bP~OnQ)&Kwi delta 402 zcmV;D0d4-7qyd_w0gze&mXTW`f3_k-BT=D3TPX#Bpm0Sd8B$A$ojP`^zI|;PNKl|p zz|ETFn|~I0oGL1njw4e4R4Pf`b~}kEx0aSK;&zH(8o7^7z-TCGOh}z-CAg0FC<*nI zkg)jX=A9T0^I2k&p*9g*NfAXTYnP4{hAdT*R_z(e6k&y_h%%c-Mk83Ge*&3%r1faU z1c%XxkYiDBo}eh@LV7jc%48W;Sc)aZ(?Y8CkFZ@1+ZC`zv%pBR3rzuKY2+HTea_E!To)@Zr#q-`1kGx5u$v8Z<9Hf zJ#(^?iiKfYZB_0J(GUGn!=_{bAdsc#M@KPCP*a%g1f|Im6d z$C^wfwZcI+=m(?ju(cA5u~it1aWDw`*I_Wi^~)4J+=kY}a*ma@CLv5^#YXNdJAE5s zQ44&wie*6|K1h|M;@RVIfp@BwMyrApL%dm>2v@_-tz=iRaY=BqfEm3Co3m3SI+ZF5 m-Rt+AG0cU^tjL@@Zr#q-@b~Tp5u$v8Z<9Hf zJ#(_-iiKfYh`Fw*q&piN9giB(qwM}+pu#%Y*U=#uTHh;n37EjU;E8@+8-Yo4l zm&xXx_AQ@4)`IDb3#ajd$?;96hVyKm`sa|8F8TW_eB?2y)Hes?pA!EYIW)5He`qzI zVNIrzT4Ar<@Ae1nVRI=MW1C}lh~1m8HwdpsxO$zShg;BmT+Fc2)+B_ftk}q{Wv6dJ zENX!-R-IZWwI*qogr(Wz8f m=w5#aMlcg9vm$feq+DOl*X$j(gfH4O5L(xcz`?V>0o*bm+^zHg diff --git a/docs/sequence-diagrams/puml/set-transfer-filter.png b/docs/sequence-diagrams/puml/set-transfer-filter.png index 50edbdebe1599ba06ba5092833dd7b37b90da01b..c741acdd622e42bcea6be6514eb5d5b24713324c 100644 GIT binary patch delta 397 zcmV;80doHPmjU~i0g!Ni!A=`75WUY=jP^ouNJ1j0V5L-PfmTYB77@rbns_IP#qM}( zk5}UF@wQqBwAbExvixTJ=FNMa1tqVsD&gdyT8Dfzs!Ng<85&oO0{@IGh6jbEy{8J` zgrYi$)s{VwQRgxHP8Hv~M;824R8}&m6Q?z{PDDr547M&xLH-GUvzvxRLk2LN;))g3 zlY||6+}TpoVVoq$C{CvUe+i2bD(hOx0-E3%5Q|d z4oJ)|mtVZ^6}|247Rhl<-qN<@(5}NRdZhcE;?Adn|EdONEJd3M%wFR8@Abd-`nLV| z56cBM?1OcJ#ay}9t9^CI3DMxm-*xzAMUTPE%%}K^>%^5MQ<1j8`Rrv z)bzd&b7~0hqNuGn#~(Gz{Q6r5;EgoaJE>ar^Y!wz;ltVBv(*%pPfBpTglpbWEH%9_ ruCTJt)ATQc3s{isV{$u37Pv}ztA9$h6+8p12uwfGlT=-^?Ewx-UBk|q delta 397 zcmV;80doHPmjU~i0g!NiO>f&U488ML5WX}ybOthHYr6qivK334Yrx1%BGjfl zi89cCUwMPuwA*#Jodi8nkB{$Z9+bSss)VznY8~>?s4hubWN2J93j8y&7#{}hHF+- zPZIX*ac@gahjEf1qd1!Z{4oFrA5M9546NIZV*8t-*HLV1G7og%?UBN<-)goEDZdi- zG9WQOUw-kvRrI>ITO`K~c}u&JL%R;Q=!xz(iaVbQ{;L|8vlMM6Fn^Bczt{iT>)ZC< z->;U~un*P=o)0g7#ut;}w6`Y3MJ#bV#qs<6e3HMr#QVD|Y|DMz!1s`o(7T(lDJ2K3Pps`J@ClE4b!8#ZuD? r;|eQ>JWc;RxP&FiAttwTWPz)cxBACaTf-Bqqf9_j%w#OH?Ewx-XOqMk diff --git a/docs/sequence-diagrams/puml/set-treasury-account.png b/docs/sequence-diagrams/puml/set-treasury-account.png index 0acdf43859ed7bd2d8bf46d8f5c3bfb66856db4a..91ce3a842fb470db705748c7a78063459ee5a64a 100644 GIT binary patch delta 325 zcmV-L0lNOXY`ScaS^-*-TN@SkS2SMKgRez{S=b=aB(PB;F?yA8k&79BmTBwC0-Aek zD--v6Rl#KFbh#>fhQ1t0PMu7!T(c6O$(&Wvl{?bFxK$b(QzfnTHL7n(x&f7!6kJqZ z=Lo8z2mmAruE?U*#EjDiWSlGKr;-HVuMBn`@Jx=;klmh$ts`-}XJ+3HK19tdUChI| zydiYu04{w7!qrh3-P#g=E(+!+B(snrOnw9XPv<(FW%#Z2VvaRwBb3BJH|j^D?y$9D z7E>oN8slIP_wVCqgzJwf2DlBam*pIda+(un!dNYK&U$_uQdTp3_Z~$_F}_tK)7k5( zflsm)TFH|94e4fa9=IEJ9)*l&Lu?u=p1WbRn*wMqKa XyskcYYz04->>A(Nvw9-4z5#tSPn?@~ delta 326 zcmV-M0lEIVY`bibS^-;;TN@S6S2SMK!}^MdS=b=aB(PB;F?yADk&79B7PWO{!J2z( zD-(CSRe>^eI$V`qLtl<0rzjJcYb+USqO(f6az~mWw@O1}s-)Gv2K6mTH(2E*1s9dq zIfAMv0>F|4R%F3yLgVxSkaOkyRFW|ER|cX7IFn;AWVa_`>qy-0(d^s7hp5rg#XLKg zH-xSnuuGqTaCKBhx3+|Ti-P$H$t^|G9UQBHG$Oc<-h&RNfIvlMHDckfY@6vJCZGM&Ai z8t^1*p_MGj-;iz==Yi2MdKA{jt-TZ2EZB@b(G}J+xXOggW54|zIU2J$%G_b@wMqKa YyskcYY{h;6mxmhQe!i$N{d%0gzgMzG+lgbZ~58Zgh2RYybfO004NL?NiZiS}_cL&sSKy6r=$K zwNraFCbX7KVz5?)R(nGx*X2gs>)a&{w12;(9ne)>k3@m@!N9-~bii=puYE1KIi zaYHR_;2hl}G)5a@@eQR01DHExe@_l1pWK#0pJ88|f&76rnYIg?03U#3dQqS+ zTB*O;pwOX2?Qd_GbU}Iz^iUgzVk|=*>lBvqGWH3UrPXUO6)A}4CE3sCJu|qW4LO0W zkpeU_TUqSJ1ai)QIz^oSeU6gQfvqXFjL`RCkbx(GxHLR1{Tj9tGCQb9De@Zi>`G4W zXp{^{iVx$U$$B;1zk>gk{v(!Nr(b+Koj}~oCn0*B{&D}bbJColz&J4U&!E@Kj?c6H zDcsI4Af;QX`R#fF-Ug=$a^uCBWk^D{)EGAiH-VFs8C=y$#N*5Fy8w)MW1QtG4L!b_ z9snOt+Fy*oj9i=q?xyOJ?lDA@Myzdac$LNOU)yJDg1id2irjIZi}=LEJ;vNj{RXa3 Olh-uh=e@Hc0u5rSIN@gi delta 473 zcmV;~0Ve*g$N{g&0gzgMziCuhbZ~58Zgh2RYybfO004NL?NeQES}_cL&#$m}DM;g^ z9YWpJn9y1_iNRVGTI~&)T$dYhuXC3;(Ej@+?SOXb{=l?6MfUNreNHm+f=)tJs*^&b z_F1=Em&hs7(YES(`Wc8dwR3}Ohm}$%7{qd@R^$|Fu@0_w9Pf31f~BW1YfMUdBGcs-39nXH$rq`6R??=d5?u?+luA6qtk(dIRWv$WHs& z`*XNmTtG^i6XeE=Gpmqyy~%dpO&(Ap#9zaTexA diff --git a/docs/sequence-diagrams/puml/transfer-from-domain.png b/docs/sequence-diagrams/puml/transfer-from-domain.png index 4ccc990be999929e5645918b5cd9043aa161b4ea..9876b67311c9d3adb7134336e2f4b06743ffc824 100644 GIT binary patch delta 556 zcmV+{0@MAQ%L1Cq0+3pN5ouIdbZ~58Zgh2RYybfO004NL?N!@u+CUI}->(?)5|9c6 zlvIgTD%6BlqR>WMqQ0TQp1=xw*4+z)zwa(F4m3f^2jHjm>|D;7Iiu|wi`u#@6&Fiu za}zb2d5Rn?jaX$(Lw_A{O!Y+KLSrVx1v;zPWpmO3W2-d$&Pk(xKZx9?lCjKvJXC&R zMiaFnt{mG(WK_B)T@iETI6=LIN^ebUO+|=K2PPWXJdp+)f?>V|Rpf_GM~HnfsDFjB zLuD?8hR2GZKMk2u*S-**V4frOsWd7Cb5 zZ%UNj9&Sp=F0USt4c=wCBXWXL^A_;IPXvbS2kP&K7r~G$`VQeV4}D62!o`l&$p(AG zx}5I`w*rZuChVpuK2HAx^%M9@<-Gtu@+vi+&^rPOx((ug?0T|cmqfQ*tMiVWcjUYy z@9oG#cxR@=0r=u3sHD|sU$(CsSJg3E=sSk?4YXR(@DpD5qnB zL>jB*+y#}@L?71(Bga8!QGmn!`=5IQ^mr|`;w<3qKMr3VK3~aD*Ui+>_MdyM*w(V4S#0w$vwC<~SV delta 557 zcmV+|0@D4O%L1Fr0+3pN5@}RebZ~58Zgh2RYybfO004NL?N!@u8Zi)k_g9Q~2}tFV z6rprgD%6BlqR>WMqQ0SFcLEl>_SPOl`1{&)*+3Jdd;t689na;QnKN?FG8%SSDy~+{ zxs965JVg~OjaX+*OMe`xnCgkdrNK;yD|D=t%NAq=#;gte%E_RAKZx9?lCjKvJXC&S zMpL~eRXMef$?9}NrXm*FsRYdqD*X*9wiO||U6>kF_K6H|2!_QDbdevrT_Fy|p#BBQ z5)p6_Rn=)S*IPyA11Q>-NAEdbpxyn+~&(mX$a1~SICk5sZxe&`TL3kf};^EOl1 zUX>`lJ=~N~xx9KrHh7omPRI#L?Q6hCKM`2scho-&FM<&<`VQeN4}D62!o{A|*#>*W zrkw8?w*rZuChVsv-cSDw^)vWO<^2PG;#F!qp*I8+bQ{Ef+4E$>E{R^bR+k;Q?8s$D z-rA9e@XpLeL-56IP|0=UrghV9bgC0%7`PN#9cX=uuG`VaTbNDnAY9i(_4~sRtac_Q zNTg*W7cQu*CI+}c7&{eo76mwJaR1|AfWF#Dqg57g4<1J^4xM)Wt7Mpv32k^BiTh%p veHH6Os%7LKtADHCiXp0{!==yd`P})k6Y&=!*?Wzs2jwZVbOI)$O_2$U diff --git a/docs/sequence-diagrams/puml/whitelist-controller.png b/docs/sequence-diagrams/puml/whitelist-controller.png index ef813423bd587b612c90b1171957fefdad3b670d..1b4f7f6e0ad92107dd21a8291d57e1cde55864d2 100644 GIT binary patch delta 366 zcmV-!0g?WPdxv|Fdw+mLK!_S`f`dn4 z$vba$P>8bPvJ~nsB6$&XI(e$Ns?!}A4W%*tLRlFw0Wg%vl6UJCG<_zUVcDc<#9EBH4J|r z`?xx$AMr3Cjw^>@@M-qHbANMgR{hDsk#gX4>! zcZ#d!5UX|*8e(^|5DVjML>O0C{p7^&H({(wg>%QEGYW8;6OV81KMFYFQd`3rvA}pe z`5HJoXCY(1Uj`JCpf% z^3I#>XDkfcB!;UUbDDYedKwE=RBC}v>KVOTQUO&%DIy~hfGc5HE1PV|fCyL{EX^sB z85?0xgo#uoNF7rKGIgM{ZV8~*!`Gc;id_W*t=Q-|CUZ<34S(xLgnL6nS%$qHzy%+x zcjs6SoifE6$D;CJ`m&r)eSb9HxG=iLR0Mkw(PmGFN+DS0g6W&8v;2a*O2cCOe&GK; zcDg#GAMwy96&4Od|I_S$=lw^R8y#%idd;?X z)5XtE{#?RDTeWS z@-@(DS05zff{asw>j@0$P1u;-MxaBfB6s-mvDyV+sK`3^JR}7J?YQRPdJFgf4z(u? MB#-Tzv)cizJHuqHga7~l diff --git a/docs/sequence-diagrams/puml/whitelist-registrar.png b/docs/sequence-diagrams/puml/whitelist-registrar.png index 3b2fe819a96f4ba4dc414247ceedef10185aec31..382d0ca574e33986619e6737698e1b7975ee9e7e 100644 GIT binary patch delta 402 zcmV;D0d4-&ngP?A0gze&k&#;*fBqGty#x+GKuMLZL`6!HN)(c)eDqLNXz)%JE4$;Z zJzgpQKK21Z+FpC>Y2^8M=g~W!ctIzjuGHCHr1AM+&{W7N)7Q2hc={EHHT4RErNdgO zGYn!m)H`wtwO9w)J=V0c&%|(D)P^(FL`|bj6NOHyncCUF1-ci=Zd+pUf0`;J)OUAIq>JOIc!~$0Hy2+?r)$6dkXq1gqjc+=@e>myvl!z z|B=Oy>6fn;b7;wVV;P41f6@8qvVYN8qQERLjILlf%+EjOqf1z?rjW{A)%o%`2XBMZ z1VysI?1IGku9{(s@GY>InsRt(h-Wun4+*&C);P;`qMvORZw((VdY_HJl3XN#%|hMK w6NXCSgtmp@GFr5{>s_fiav7r0IS{L9JhQl$SX-)BWN1W%`4Hf0v-JUAOUaSVQ2+n{ delta 404 zcmV;F0c-x#ngP_B0gze&l95{+fAcFwdkGx)NQzLp5)~;)D^X~p@{vPTp}{*{tnAub zd%RNqee45-w7vG0)5!Dj&ZBoc^+HZUUBSgcr1AM+&{Sknrmt*0@ccWlQQRvum5yqF z3kqUQsQ2uElvsz^SE_k!AKBndQEQVy6E(HcO%yt-X0W%x6y%;TyKC8qf6o9W6MQ&m z;Yxc!$7KwT94c#KRDzQUz+Vfn_u*VON6)fr$!XeG>^mnJziUW6Qpvjm`2+hOKf8%p zw}5ezK0R{WG(~E?nJr$o9QkwH9=EPokW=;y_YcscJq7<00;X(=bPAZBuJUH_ zf3o;K{qoInfh{|)t-;Iwf7S46)E{?NBsdQh4#zlrpI?shch|UC&oGs{(D{77KyQOn zj773Q?}NnoF3hPV{2q+xnsfZtu$kX}IVSMVwAxuyC;Itz`O+{R^*(CB6}w1++a=uc yFA9~!31tgy%4pI0Q|}rUWXceY&XEnw;+e%g#o7v<0c8V3hOLbG0l%~K0bfgd*37v8